[英]failed to connect with Postgres container in Django
django.db.utils.OperationalError:連接到“db”(172.18.0.2)的服務器,端口 5432 失敗:致命:數據庫系統正在啟動
我在連接到 Postgres 容器時遇到問題。 我嘗試了不同的方式,例如僅在 docker-compose 文件中設置密碼。 還是卡住了。
docker-compose.yml
version: '3'
services:
db:
image: postgres:alpine
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_USER=user
- POSTGRES_DB=userdb
volumes:
- django_db:/var/lib/postgresql/data
container_name: db
singup:
build: .
command: python manage.py runserver 0.0.0.0:8000
ports:
- 8000:8000
container_name: singup
depends_on:
- db
volumes:
django_db:
數據庫設置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'userdb',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'db',
}
}
這是一個時間問題,即使您有以下行
singup:
depends_on:
- db
它只是在等待 db 容器啟動並運行,而不一定是 Postgres。
為避免這種情況,請使用 wait-for-it、dockerize、sh-compatible wait-for 或 RelayAndContainers 模板等工具。 這些是小型包裝腳本,您可以將它們包含在應用程序的映像中,以輪詢給定的主機和端口,直到它接受 TCP 連接。
例如,要使用 wait-for-it.sh 或 wait-for 來包裝服務的命令:
singup:
depends_on:
- db
command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.