Docker部署Django+PostgreSQL:数据库连接失败求助
问题解决办法
你的Web服务无法连接数据库,是由三个关键问题导致的,逐一修复即可:
1. 数据库HOST配置错误
在Docker Compose的网络中,容器之间通过服务名通信,而非localhost——localhost在Web容器里指向容器自身,并非PostgreSQL容器。
修改settings.py中的数据库HOST:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'whatsarounddb', 'USER': 'dbadmin', 'PASSWORD': 'dbadmin123', 'HOST': 'db', # 替换为docker-compose.yml里的db服务名 'PORT': 5432, } }
2. 数据库密码不匹配
docker-compose.yml中设置的PostgreSQL密码是dbadmin123,但settings.py里写的是dbadmin321,两者不一致导致认证失败。
修改settings.py中的密码,与docker-compose配置保持一致:
DATABASES = { 'default': { # 其他配置不变 'PASSWORD': 'dbadmin123', # 其他配置不变 } }
3. 数据库就绪检测问题
depends_on仅保证db服务先启动,但不确保PostgreSQL完成初始化并接受连接。Web服务启动时可能数据库还未就绪,导致连接失败。
可以在web服务的启动命令前添加等待脚本,确保数据库就绪后再启动Django:
修改docker-compose.yml的web服务command:
services: web: # 其他配置不变 command: > sh -c " until pg_isready -h db -U dbadmin; do echo 'Waiting for PostgreSQL...' sleep 2 done python manage.py runserver 0.0.0.0:8000 "
注意:需要确保web容器内有pg_isready工具,若没有,可在Dockerfile中添加安装命令:
# 在RUN pip install -r requirements.txt之后添加 RUN apt-get update && apt-get install -y postgresql-client
完成以上修改后,重新执行docker-compose up --build即可正常连接数据库。
内容的提问来源于stack exchange,提问作者Dragos
相关产品推荐
相关产品推荐

