无法连接 Django 中的 Postgres 容器
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
它只是在等待数据库容器启动 运行,不一定是 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"]
wait-for-it 回购:https://github.com/vishnubob/wait-for-it
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
它只是在等待数据库容器启动 运行,不一定是 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"]
wait-for-it 回购:https://github.com/vishnubob/wait-for-it