django.db.utils.OperationalError:連接到“db”(172.18.0.2)的服務器,埠 5432 失敗:致命:資料庫系統正在啟動
我在連接到 Postgres 容器時遇到問題。我嘗試了不同的方式,比如只在 docker-compose 檔案中設定密碼。還是卡住了。
碼頭工人-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',
}
}
uj5u.com熱心網友回復:
這是一個時間問題,即使您有以下行
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"]
等待它的回購:https : //github.com/vishnubob/wait-for-it
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/405628.html
標籤:
