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

Docker Compose部署Django无法连接PostgreSQL数据库问题

问题根因

报错日志已经定位到核心错误:web容器尝试连接127.0.0.1:5432的PostgreSQL服务,必然会失败。
Docker Compose默认会为所有服务创建单独的桥接网络,每个容器拥有独立的网络命名空间,容器内的127.0.0.1/localhost只会指向容器自身,不会指向同网络下的其他容器。当前Django配置里的数据库地址填了回环地址,请求根本到不了db容器。

修复步骤
  • 修改Django数据库连接配置
    打开Django项目的settings.py,找到DATABASES配置段,将HOST参数的值从127.0.0.1/localhost改为db。Docker Compose内置DNS解析,会自动把服务名db解析为PostgreSQL容器的内部IP,数据库端口保持默认5432即可,无需修改。
    正确配置参考:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'more_energy_db',
            'USER': 'dmitriy',
            'PASSWORD': '你的.env文件中配置的PostgreSQL密码',
            'HOST': 'db',
            'PORT': '5432',
        }
    }
    
  • 补充服务就绪等待逻辑(可选但推荐)
    现有配置里的depends_on字段只会控制容器启动顺序,不会等待PostgreSQL服务真正完成初始化。如果db容器刚启动、数据库还没准备好接收连接时web就发起请求,依然会报连接错误。
    首先修改Dockerfile,在apk安装依赖的步骤里加入netcat工具用于端口检测:
    RUN apk update \
        && apk add postgresql-dev gcc python3-dev musl-dev netcat-openbsd
    
    再修改docker-compose.yml里web服务的启动命令,加端口检测循环,等数据库端口通了再启动Django服务,顺便可以自动执行迁移:
    command: >
      sh -c "while ! nc -z db 5432; do sleep 1; done
      && python MoreEnergy/manage.py migrate
      && python MoreEnergy/manage.py runserver 0.0.0.0:8000"
    
  • 重启服务生效
    所有配置修改完成后,在项目根目录执行以下命令重建并启动服务:
    docker compose down
    docker compose up --build
    
连通性验证

服务启动后可以直接进入web容器测试数据库连通性,执行命令:

docker compose exec web sh
nc -z db 5432 && echo "数据库连接正常"

如果输出“数据库连接正常”,说明容器间网络通了,Django服务可以正常访问数据库。

内容的提问来源于stack exchange,提问作者Dmitriy Lunev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:54:27