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

基于Docker部署Django应用无法连接PostgreSQL数据库求助

解决Docker中Django无法解析PostgreSQL主机名"db"的问题

以下是几个针对性的排查和解决步骤:

  • 确保容器在同一个网络中
    docker-compose run 默认会创建临时网络,而非项目默认的服务网络,这会导致web容器无法解析db容器的主机名。运行命令时指定项目网络即可:

    docker-compose run --rm --network $(basename $(pwd)_default) web <你的命令>
    

    或者先启动db服务,再用docker-compose exec执行命令(需容器处于运行状态):

    docker-compose up -d db
    docker-compose exec web <你的命令>
    
  • 验证db服务是否正常启动
    先单独启动db服务并查看日志,确认PostgreSQL初始化完成且无错误:

    docker-compose up -d db
    docker-compose logs db
    

    日志中出现database system is ready to accept connections才算启动成功。

  • 确认环境变量正确传递到web容器
    进入web容器查看环境变量是否正确设置:

    docker-compose run --rm web env | grep DATABASE_HOST
    

    确保输出结果是db,同时检查Django的settings.py中是否正确读取该变量,比如:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': os.getenv('DATABASE_NAME'),
            'USER': os.getenv('DATABASE_USER'),
            'PASSWORD': os.getenv('DATABASE_PASSWORD'),
            'HOST': os.getenv('DATABASE_HOST', 'db'),
            'PORT': os.getenv('DATABASE_PORT', '5432'),
        }
    }
    
  • 重启Docker服务修复DNS问题
    如果以上步骤都没问题,可能是Docker DNS缓存异常,重启Docker服务尝试:

    # Linux
    sudo systemctl restart docker
    # macOS
    brew services restart docker
    # Windows (PowerShell)
    Restart-Service Docker
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:05:59