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

Docker Compose部署下Django应用无法连接PostgreSQL问题排查

Django + Docker Compose PostgreSQL 连接失败解决指南

核心排查点与修复步骤

1. 确认Django配置正确读取环境变量

检查项目settings.py中的数据库配置,必须完全从环境变量取值,不能硬编码:

import os

DATABASES = {
    'default': {
        'ENGINE': os.environ.get('APP_DB_ENGINE'),
        'NAME': os.environ.get('APP_DB_NAME'),
        'USER': os.environ.get('APP_DB_USER'),
        'PASSWORD': os.environ.get('APP_DB_PASSWORD'),
        'HOST': os.environ.get('APP_DB_HOST'),
        'PORT': os.environ.get('APP_DB_PORT'),
    }
}

若存在HOST: 'localhost'这类硬编码值,会导致容器内无法访问DB服务。

2. 验证Web容器环境变量加载

进入Web容器,检查环境变量是否正确加载:

docker exec -it immohub-web-1 printenv | grep APP_DB_

需确保APP_DB_HOST=db、APP_DB_PORT=5432,其余参数与.env一致。

3. 测试容器间网络连通性

进入Web容器,测试能否访问DB服务的5432端口:

# 安装telnet(Debian/Ubuntu镜像)
apt update && apt install -y telnet
telnet db 5432

若连接被拒绝:

  • 确认Docker Compose默认网络未被修改,Web与DB服务需在同一网络。
  • 检查主机防火墙是否拦截容器间的5432端口通信。

4. 修复PostgreSQL远程连接权限

由于DB数据目录已通过Volume持久化,初始化阶段的pg_hba.conf不会自动更新,需手动允许Docker网段连接:

  1. 进入DB容器:
docker exec -it immohub-db-1 bash
  1. 编辑pg_hba.conf:
vi /var/lib/postgresql/data/pg_hba.conf
  1. 添加以下规则:
host    all             all             172.17.0.0/16            scram-sha-256
host    all             all             192.168.0.0/16           scram-sha-256
  1. 重启PostgreSQL:
pg_ctl restart -D /var/lib/postgresql/data/

或直接在docker-compose.yml的db服务中添加启动参数:

db:
  image: postgres
  command: postgres -c 'host all all 0.0.0.0/0 scram-sha-256'
  # 保留原有其他配置

5. 修正初始化脚本挂载方式

当前db服务中初始化脚本挂载为目录,若init.sql是单个文件,需修改为文件挂载:

volumes:
  - ./db/data/:/var/lib/postgresql/data/
  - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql

否则挂载失效,可能导致用户/数据库未正确创建。

6. 排查健康检查环境变量解析问题

日志中出现FATAL: role "root" does not exist,可能是健康检查的环境变量未正确替换,修改为硬编码参数:

healthcheck:
  test: ["CMD-SHELL", "pg_isready -d immohub -U immohub"]
  interval: 10s
  timeout: 10s
  retries: 5
  start_period: 5s

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:27:02