Django配合Docker Compose部署时无法连接localhost 5432端口PostgreSQL服务
解决Docker Compose下Django连接PostgreSQL报错方案
核心错误原因
你现在的配置有三处不匹配/错误,直接导致连接失败:
- Django配置中数据库主机写了
localhost:Docker容器网络中,web容器的localhost指向自身,无法访问同网络下的db容器 - 数据库名称不匹配:Django配置的库名是
fitshop,但PostgreSQL容器初始化时创建的默认库是postgres - 数据库密码不匹配:Django配置的密码是
fitpass,但PostgreSQL容器配置的默认密码是postgres
具体修复步骤
第一步:统一数据库配置
选择任意一套方案对齐配置即可,这里以修改Django配置为例:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'postgres', # 和docker-compose的POSTGRES_DB取值一致 'USER': 'fitshopuser', # 和docker-compose的POSTGRES_USER取值一致 'PASSWORD': 'postgres', # 和docker-compose的POSTGRES_PASSWORD取值一致 'HOST': 'db', # 填Docker Compose中数据库服务的名称,自动通过内部DNS解析 'PORT': '5432', } }如果你想保留自定义库名
fitshop,就把docker-compose.yml中db的环境变量改成- POSTGRES_DB=fitshop即可。第二步:(可选)解决数据库启动时序问题
depends_on仅保证容器启动顺序,不会等待PostgreSQL进程完全就绪,web启动过快仍会触发连接报错,最简单的处理方式是修改web的启动命令,增加等待时间:command: sh -c "sleep 5 && python manage.py runserver 0.0.0.0:8000"第三步:重启服务生效
先清空旧的数据库挂载卷(避免旧初始化数据干扰,注意:会清空原有数据库数据,有需要请提前备份),再重新启动服务:
docker-compose down -v docker-compose up --build
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

