起きたこと
Django+PostgreSQLの開発環境をDockerで作ろうとしていたら,Django側で以下のエラーが出た.
2023-10-13 15:03:01 django.db.utils.OperationalError: connection to server at "db" (172.30.0.2), port 5432 failed: Connection refused
2023-10-13 15:03:01 Is the server running on that host and accepting TCP/IP connections?
構築は以下の記事を参考にした.
docker-compose.yml
はこんな感じ.
version: "3"
services:
db:
image: postgres:16.0
env_file: .env
ports:
- "54320:5432"
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
env_file: .env
volumes:
- ./src:/src
ports:
- "8000:8000"
depends_on:
- db
解決方法
クライアントツールを使ってホスト側から接続すると,接続できた.
psql -U postgres --port=54320 -h localhost
PostgreSQLが立ち上がる前にDjangoがDBに接続しようとしてて,それが原因で落ちていたらしい.
(教えてくれた友達ありがとう)
docker-compose.yml
にヘルスチェックを追加して次のように書き直したらうまく起動した.
version: "3"
services:
db:
image: postgres:16.0
env_file: .env
ports:
- "54320:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
env_file: .env
volumes:
- ./src:/src
ports:
- "8000:8000"
depends_on:
db:
condition: service_healthy