You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

docker-compose部署时Django容器无法连接PostgreSQL容器问题求助

问题排查与修复方案

1. 数据库连接地址配置错误

Postgres日志中输出的listening on IPv4 address "0.0.0.0", port 5432是服务端的监听标识,代表Postgres接受来自所有网卡的连接请求,并非客户端访问时使用的目标地址。
Docker Compose会为同一编排文件下的所有服务创建专属内部网络,服务名称就是内部网络的DNS域名,你配置中的数据库服务名为db,因此Django连接数据库的主机地址应该填db,而非0.0.0.0。

2. 数据库密码不匹配

你在docker-compose.yml中为Postgres配置的POSTGRES_PASSWORD值为qweytr21,但DATABASE_URL中填写的密码是somepassword,两边参数不一致会导致鉴权失败。

3. 服务启动时序问题

depends_on配置仅能保证db容器先于web容器启动,无法保证Postgres服务完成初始化、准备好接受连接后再启动web服务。Postgres首次启动时会执行数据库初始化逻辑,耗时通常在几秒不等,此时提前启动的Django执行迁移命令就会触发连接拒绝报错。

具体修复步骤
  • 修改DATABASE_URL配置为:
DATABASE_URL=postgres://postgres:qweytr21@db:5432/music
  • 解决启动时序问题,可选两种方案:
    • 临时测试方案:修改web服务的启动命令,加入等待逻辑,示例:
      command: sh -c "sleep 10 && pipenv run python manage.py migrate && pipenv run python manage.py runserver 0.0.0.0:8000"
      
    • 稳定方案:在镜像中集成wait-for-it等端口检测脚本,启动时先检测db服务的5432端口可用后再执行后续命令。
  • 如果你之前已经启动过容器,建议先执行docker-compose down -v删除旧的容器和数据卷,避免旧的数据库配置残留导致问题,再重新执行docker-compose up启动服务。

内容的提问来源于stack exchange,提问作者Adilet Usonov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:24:02