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

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

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

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

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

Q&A

解決済

1回答

649閲覧

docker compose でポートフォワーディングできない

Luna_rab

総合スコア17

docker-compose

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

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

0グッド

1クリップ

投稿2023/01/04 09:17

編集2023/01/05 23:55

前提

fast-api + postgreSQL を使用してapiサーバを作成しようとしています。
ソースコードを書き終え、docker composeを使用してコンテナを立ち上げようとしたのですが、うまくポートがつながらずサーバに通信することができません。

開発は asdf + poetry で行っています。

実現したいこと

  • WSLやWindowsからコンテナ上で動いているサーバにlocalhostでアクセスできるようにしたい。

該当のソースコード

ディレクトリ構成は以下です。

. ├ radish_db/ │ ├ main.py │ ├ docker/ │ ├ radish_db │ │ └ Dockerfile │ ├ docker-compose.yaml ├ pyproject.toml

pyproject.toml

toml

1[tool.poetry] 2name = "radish_db" 3version = "0.1.0" 4description = "" 5authors = ["*********"] 6 7[tool.poetry.dependencies] 8python = "^3.10" 9fastapi = {extras = ["all"], version = "^0.88.0"} 10sqlalchemy = "^1.4.45" 11pyhumps = "^3.8.0" 12psycopg2 = "^2.9.5" 13 14[tool.poetry.group.dev.dependencies] 15flake8 = "^6.0.0" 16black = "^22.12.0" 17isort = "^5.11.4" 18mypy = "^0.991" 19pytest = "^7.2.0" 20 21[build-system] 22requires = ["poetry-core>=1.0.0"] 23build-backend = "poetry.core.masonry.api" 24 25[tool.black] 26line-length = 120 27exclude = ''' 28( 29 /( 30 \.eggs 31 |\.git 32 |\.mypy_cache 33 |\.venv 34 |build 35 |dist 36 )/ 37 | snapshots/snap_.*\.py 38 | .*\.conf\.py 39) 40''' 41 42[tool.isort] 43# https://black.readthedocs.io/en/stable/compatible_configs.html#isort 44multi_line_output = 3 45include_trailing_comma = true 46force_grid_wrap = 0 47use_parentheses = true 48ensure_newline_before_comments = true 49line_length = 120 50skip_glob = [ 51 ".venv", 52 "**/snapshots/snap_*.py", 53 "*.conf.py", 54]

Dockerfile

Dockerfile

1FROM python:3.10-bullseye AS deps 2RUN apt-get update && apt-get install -y \ 3 curl \ 4 libpq-dev # psycopg2 \ 5 && apt-get clean \ 6 && rm -rf /var/lib/apt/lists/* 7 8 9RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/etc/poetry python3 - --version 1.3.1 10 11WORKDIR /app 12COPY ./pyproject.toml ./poetry.lock /app/ 13RUN /etc/poetry/bin/poetry export -f requirements.txt --output requirements.txt 14 15 16# --- 17FROM python:3.10-bullseye 18RUN apt-get update \ 19 && apt-get install -y --no-install-recommends \ 20 libpq5 \ 21 && apt-get clean \ 22 && rm -rf /var/lib/apt/lists/* 23 24WORKDIR /app 25 26COPY --from=deps /app/requirements.txt /app/requirements.txt 27RUN pip install --upgrade pip 28RUN pip install --no-cache-dir -r requirements.txt 29 30COPY ./ /app

docker-compose.yaml

yaml

1version: '3' 2services: 3 apiserver: 4 build: 5 context: . 6 dockerfile: ./docker/radish_db/Dockerfile 7 ports: 8 - 8000:8000 9 command: uvicorn radish_db.main:app 10 tty: true 11 depends_on: 12 - db 13 14 db: 15 image: postgres:15.1-bullseye 16 volumes: 17 - postgres_data:/var/lib/postgresql/data 18 environment: 19 - POSTGRES_USER=${DB_USER} 20 - POSTGRES_PASSWORD=${DB_PASS} 21 - POSTGRES_DB=${DB_NAME} 22 - TZ="Asia/Tokyo" 23 command: -p ${DB_PORT} 24 25volumes: 26 postgres_data:

試したこと

❯ docker compose up -d ... ❯ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5f6277968143 radish-db-apiserver "uvicorn radish_db.m…" 2 minutes ago Up 8 seconds 0.0.0.0:8000->8000/tcp radish-db-apiserver-1 07a17277d0cc postgres:15.1-bullseye "docker-entrypoint.s…" 2 minutes ago Up 9 seconds 5432/tcp radish-db-db-1 ❯ curl http://localhost:8000/ curl: (52) Empty reply from server

docker psを見るとコンテナの8000番とlocalhostの8000番がつながっているように見えますが、curlでは応答が帰ってきません。

❯ docker exec -it radish-db-apiserver-1 bash root@5f6277968143:/app# curl http://localhost:8000/ {"detail":"Not Found"}

また、docker execでコンテナ内に入ってcurlしてみると応答は返ってくるのでサーバ自体は動いているのかと思います。

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

Windows10 Home
WSL2 Ubuntu 20.04.4
Docker version 20.10.21
Python 3.10.8
Poetry (version 1.3.1)

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

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

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

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

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

yuma.inaura

2023/01/04 14:24

回答者が再現できるように Dockerfileも載せておきませんか?
Luna_rab

2023/01/05 13:07

ご提案ありがとうございます。 Dockerfileやディレクトリ構成について加筆しました。
guest

回答1

0

自己解決

下記のようにfast-apiのサーバを起動するコマンドをdocker-compose.yamlからDockerfileに移動したらつながるようになりました。

Dockerfile

Docker

1FROM python:3.10-bullseye AS deps 2RUN apt-get update && apt-get install -y \ 3 curl \ 4 libpq-dev # psycopg2 \ 5 && apt-get clean \ 6 && rm -rf /var/lib/apt/lists/* 7 8 9RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/etc/poetry python3 - --version 1.3.1 10 11WORKDIR /app 12COPY ./pyproject.toml ./poetry.lock /app/ 13RUN /etc/poetry/bin/poetry export -f requirements.txt --output requirements.txt 14 15 16# --- 17FROM python:3.10-bullseye 18RUN apt-get update \ 19 && apt-get install -y --no-install-recommends \ 20 libpq5 \ 21 && apt-get clean \ 22 && rm -rf /var/lib/apt/lists/* 23 24WORKDIR /app 25 26COPY --from=deps /app/requirements.txt /app/requirements.txt 27RUN pip install --upgrade pip 28RUN pip install --no-cache-dir -r requirements.txt 29 30COPY ./ /app 31CMD ["uvicorn", "radish_db.main:app", "--host", "0.0.0.0", "--port", "80"] 32EXPOSE 80

docker-compose.yaml

yaml

1version: '3' 2services: 3 apiserver: 4 build: 5 context: . 6 dockerfile: ./docker/radish_db/Dockerfile 7 ports: 8 - 8000:80 9 tty: true 10 depends_on: 11 - db 12 13 db: 14 image: postgres:15.1-bullseye 15 volumes: 16 - postgres_data:/var/lib/postgresql/data 17 environment: 18 - POSTGRES_USER=postgres 19 - POSTGRES_PASSWORD=postgres 20 - POSTGRES_DB=postgres 21 - TZ="Asia/Tokyo" 22 command: -p 5432 23 24volumes: 25 postgres_data:

投稿2023/01/05 14:55

Luna_rab

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問