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

从Django连接Docker化PostgreSQL数据库超时问题求助

解决思路

1. 配置Docker容器端口映射

你的docker-compose.yml未将PostgreSQL容器的5432端口映射到宿主机,导致宿主机上的Django无法访问容器内的数据库。修改配置如下:

db:
  image: postgres:13-alpine
  volumes:
    - dev-db-data:/var/lib/postgresql/data
  environment:
    - POSTGRES_DB=devdb
    - POSTGRES_USER=devuser
    - POSTGRES_PASSWORD=pass123
  ports:
    - "5432:5432"  # 新增端口映射,绑定容器端口到宿主机对应端口

修改后重启容器:docker-compose down && docker-compose up -d

2. 允许PostgreSQL接受远程连接

默认PostgreSQL仅允许本地访问,需调整配置开放远程连接:

  • 开发环境临时方案:在docker-compose的environment中添加POSTGRES_HOST_AUTH_METHOD=trust(仅开发用,生产环境禁用):
environment:
  - POSTGRES_DB=devdb
  - POSTGRES_USER=devuser
  - POSTGRES_PASSWORD=pass123
  - POSTGRES_HOST_AUTH_METHOD=trust
  • 生产级正规方案:
    1. 创建自定义pg_hba.conf文件,添加允许远程连接的规则:
      host    all             all             0.0.0.0/0               md5
      
    2. 在docker-compose的volumes中挂载该文件到容器内的/var/lib/postgresql/data/pg_hba.conf,确保PostgreSQL启动时加载该配置。同时确认postgresql.conf中listen_addresses = '*'(部分postgres镜像默认已设置,若未设置可挂载自定义配置文件)。

3. 调整Django数据库配置

将settings.py中的数据库HOST改为localhost(依赖端口映射,无需使用容器内部IP):

'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'HOST': 'localhost',
    'PORT': '5432',
    'NAME': 'devdb',
    'USER': 'devuser',
    'PASSWORD': 'pass123',
}

4. 验证连接有效性

先用宿主机的psql测试数据库连通性:psql -h localhost -p 5432 -U devuser devdb,输入密码后若能正常进入数据库,说明配置没问题,再重启Django服务测试连接。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:33:13