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

Docker部署Django项目时遭遇django.db.utils.OperationalError数据库连接问题求助

Docker部署Django项目时遭遇django.db.utils.OperationalError数据库连接问题求助

嘿,我之前也碰到过几乎一模一样的问题!别着急,咱们一步步排查:

  • 检查Docker网络是否一致
    首先得确保你的Django容器和数据库容器(命名为db的那个)在同一个Docker网络里。如果是用docker-compose管理的,默认会自动创建一个专属网络,但要是你手动启动容器的话,得手动指定同一个网络。
    你可以用docker network ls查看现有网络,再用docker inspect <你的Django容器名称>和docker inspect <db容器名称>对比两者的网络配置,确认它们属于同一网络。

  • 核对Django数据库配置
    打开你的Django项目的settings.py,检查DATABASES里的HOST字段是不是严格写的'db'——这个名称必须和你Docker配置里的数据库服务名完全一致!千万别写成localhost或者127.0.0.1,因为容器内部的localhost指向的是容器自身,不是宿主机或者数据库容器。
    举个正确的配置例子:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql', # 换成你实际用的数据库引擎,比如mysql
            'NAME': 'your_database_name',
            'USER': 'your_db_user',
            'PASSWORD': 'your_db_password',
            'HOST': 'db',
            'PORT': '5432', # 对应数据库的默认端口,mysql是3306
        }
    }
    
  • 确保容器启动顺序合理
    有时候Django容器会比数据库容器先启动完成,这时候数据库还没就绪,就会出现主机名解析失败的问题。你可以在docker-compose.yml里给Django服务添加依赖和健康检查,确保数据库完全就绪后再启动Django:

    services:
      db:
        image: postgres:15 # 换成你用的数据库镜像
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U your_db_user -d your_database_name"]
          interval: 5s
          timeout: 5s
          retries: 5
      web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        depends_on:
          db:
            condition: service_healthy
    
  • 尝试重置Docker网络缓存
    如果上面的方法都没解决问题,可能是Docker的DNS缓存出了小问题。试试重启Docker服务:Linux上用sudo systemctl restart docker,Windows或macOS直接重启Docker Desktop就行。
    也可以彻底清理旧的容器和网络,重新构建:docker-compose down -v,然后再执行docker-compose up --build。

要是这些方法都试过还不行,可以把你的docker-compose.yml和settings.py的关键配置(记得隐藏密码等敏感信息)发出来,我再帮你排查细节!

备注:内容来源于stack exchange,提问作者Faizan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:59:38