質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

2941閲覧

fast api と nginx をdocker-compose で動かしたら connect() failed (111: Connection refused) while connection

ryousu

総合スコア0

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/08/28 14:16

編集2021/08/29 03:22

前提・実現したいこと

fast apiとnginxの疎通をdocker composeで行いたいです。

発生している問題・エラーメッセージ

fast apiとnginxをdocker-compose で動かしてますが、localhostを叩いたときに、fastapiで定義したhellow worldの代わりに502が出てしまいます。。

docker logs web ではconnect() failed (111: Connection refused) while connecting to upstream, client: 172.27.0.1, server:が出てますが、api側のlogを見るとlocalhostで問題なく動いており原因がわかりません。

該当のソースコード

ソースコード。はこちらです

file tree

. ├── Dockerfile ├── README.md ├── docker-compose.yml ├── main.py ├── nginx │   ├── Dockerfile │   └── nginx.conf └── requirements.txt

docker-compose

docker-compose

version: "3.9" services: web: container_name: web build: nginx ports: - 80:80 depends_on: - api networks: - local-net api: container_name: api build: . ports: - 8000:8000 networks: - local-net expose: - 8000 networks: local-net: driver: bridge

web

nginx/Dockerfile

FROM nginx RUN apt-get update COPY nginx.conf /etc/nginx/nginx.conf

nginx/nginx.conf

worker_processes 1; events { worker_connections 1024; accept_mutex off; use epoll; } http { include mime.types; upstream app_serve { server web:8000; } access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; server { listen 80 ipv6only=on; server_name 127.0.0.1; location / { proxy_pass http://app_serve; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } }

api

Dockerfile

ARG BASE_IMAGE=python:3.8-buster FROM $BASE_IMAGE RUN apt-get -y update && \ apt-get install -y --no-install-recommends \ build-essential \ openssl libssl-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ARG USER_NAME=app ARG USER_UID=1000 ARG PASSWD=password RUN useradd -m -s /bin/bash -u $USER_UID $USER_NAME && \ gpasswd -a $USER_NAME sudo && \ echo "${USER_NAME}:${PASSWD}" | chpasswd && \ echo "${USER_NAME} ALL=(ALL) ALL" >> /etc/sudoers COPY ./ /app RUN chown -R ${USER_NAME}:${USER_NAME} /app USER $USER_NAME WORKDIR /app ENV PATH $PATH:/home/${USER_NAME}/.local/bin RUN pip3 install --user --upgrade pip RUN pip3 install --user -r requirements.txt RUN rm -rf ~/.cache/pip/* EXPOSE 8000 # Execute CMD ["uvicorn", "main:app", "--host", "127.0.0.1" ,"--port" ,"8000"]

main.py

from typing import Optional from fastapi import FastAPI app = FastAPI() @app.get("/") def load_root(): return {"Hello": "World"} @app.get("/items/{item_id}") def load_item(item_id: int, q: Optional[str] = None): return {"item_id": item_id, "q": q}

試したこと

build and start

実行した時のログを見て、原因調査をしてみましたが、原因がわかってません。

  1. docker-compose up -d --build

  2. docker logs ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cb79d9efaf75 fast-api-nginx-template_web "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web 6b049c395508 fast-api-nginx-template_api "uvicorn main:app --…" 4 minutes ago Up 4 minutes 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp api
  1. curl localhost
<html> <head><title>502 Bad Gateway</title></head> <body> <center><h1>502 Bad Gateway</h1></center> <hr><center>nginx/1.21.1</center> </body> </html>
  1. docker logs web
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/08/28 13:58:37 [error] 31#31: *8 connect() failed (111: Connection refused) while connecting to upstream, client: 172.27.0.1, server: 127.0.0.1, request: "GET / HTTP/1.1", upstream: "http://172.27.0.3:8000/", host: "localhost" 172.27.0.1 - - [28/Aug/2021:13:58:37 +0000] "GET / HTTP/1.1" 502 157 "-" "curl/7.64.1"
  1. docker logs api
INFO: Started server process [1] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaichiYanagiya

2021/08/29 05:51

nginx.conf の upstream の「server web:8000;」→「server app:8080;」ではないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問