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

Docker部署Django+PostgreSQL:数据库连接失败求助

问题解决办法

你的Web服务无法连接数据库,是由三个关键问题导致的,逐一修复即可:

1. 数据库HOST配置错误

在Docker Compose的网络中,容器之间通过服务名通信,而非localhost——localhost在Web容器里指向容器自身,并非PostgreSQL容器。

修改settings.py中的数据库HOST:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'whatsarounddb',
        'USER': 'dbadmin',
        'PASSWORD': 'dbadmin123',
        'HOST': 'db',  # 替换为docker-compose.yml里的db服务名
        'PORT': 5432,
    }
}

2. 数据库密码不匹配

docker-compose.yml中设置的PostgreSQL密码是dbadmin123,但settings.py里写的是dbadmin321,两者不一致导致认证失败。

修改settings.py中的密码,与docker-compose配置保持一致:

DATABASES = {
    'default': {
        # 其他配置不变
        'PASSWORD': 'dbadmin123',
        # 其他配置不变
    }
}

3. 数据库就绪检测问题

depends_on仅保证db服务先启动,但不确保PostgreSQL完成初始化并接受连接。Web服务启动时可能数据库还未就绪,导致连接失败。

可以在web服务的启动命令前添加等待脚本,确保数据库就绪后再启动Django:
修改docker-compose.yml的web服务command:

services:
  web:
    # 其他配置不变
    command: >
      sh -c "
        until pg_isready -h db -U dbadmin; do
          echo 'Waiting for PostgreSQL...'
          sleep 2
        done
        python manage.py runserver 0.0.0.0:8000
      "

注意:需要确保web容器内有pg_isready工具,若没有,可在Dockerfile中添加安装命令:

# 在RUN pip install -r requirements.txt之后添加
RUN apt-get update && apt-get install -y postgresql-client

完成以上修改后,重新执行docker-compose up --build即可正常连接数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:02:40