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

Django项目Docker部署PostgreSQL连接失败求助

问题排查与解决方案

以下是针对你的Django服务无法连接PostgreSQL容器问题的排查点和解决方法:

1. 确保PostgreSQL服务完全就绪后再启动Django服务

depends_on仅保证容器启动顺序,不等待PostgreSQL服务真正就绪(PostgreSQL启动需要初始化数据库,这个过程需要几秒)。Django服务可能在数据库还没准备好时就发起连接,导致解析错误。

解决方法:

  • 在webservice和djangoq的启动命令中加入等待逻辑,使用pg_isready检查数据库就绪状态:
    修改docker-compose中webservice的command:
    command: >
      sh -c "until pg_isready -h db -p 5432 -U pipeline_user; do
              echo 等待PostgreSQL启动...;
              sleep 2;
            done;
            python ./src/manage.py runserver 0.0.0.0:8000"
    
    djangoq的command同理修改:
    command: >
      sh -c "until pg_isready -h db -p 5432 -U pipeline_user; do
              echo 等待PostgreSQL启动...;
              sleep 2;
            done;
            python ./src/manage.py qcluster"
    
  • 注意:需要在WebService.Dockerfile中安装postgresql-client(pg_isready属于该包),添加以下指令:
    RUN apt-get update && apt-get install -y postgresql-client && rm -rf /var/lib/apt/lists/*
    

2. 验证容器间网络连通性

手动检查webservice容器是否能解析db主机名:

  1. 启动容器:docker-compose up -d
  2. 进入webservice容器:docker exec -it <webservice容器名> bash(容器名可通过docker ps查看)
  3. 执行ping db或nslookup db,如果无法解析,说明网络配置异常。
  4. 若网络异常,执行docker-compose down -v删除所有容器、卷和网络,再重新启动:docker-compose up

3. 检查配置细节

  • 确认Django的DATABASES配置中HOST为'db',无拼写错误(Docker服务名区分大小写,你的配置是正确的)
  • 确认PORT为'5432'或5432,无需额外修改
  • 删除docker-compose中webservice和djangoq的links配置——同一Docker网络下,服务名可直接访问,links是旧特性,可能引发不必要的问题

4. 查看PostgreSQL容器日志

执行docker-compose logs db,检查是否有启动报错:

  • 确保日志中出现database system is ready to accept connections,说明数据库已就绪
  • 若有密码错误、数据库创建失败等日志,需对应修正环境变量配置

内容的提问来源于stack exchange,提问作者Callie Deas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:10:29