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

Docker Compose环境下Django无法连接MySQL容器及依赖安装报错

Docker Compose部署Django+MySQL问题排查与解决

问题1:Django容器连不上MySQL容器,提示无法连接MySQL服务器

错误表现

启动后Django抛出数据库连接失败的错误(对应提供的错误截图)。

问题根源

depends_on仅保证容器启动顺序,不确保MySQL服务完全初始化完成——Django启动时,MySQL可能还在加载数据、初始化服务,导致连接失败。

修复步骤

  • 给MySQL添加健康检查,确保服务就绪后再启动Django
    修改docker-compose.yml里的db服务,加入健康检查配置:
    db:
      image: mysql:latest
      hostname: mysql
      restart: always
      ports:
        - '3308:3306'
      environment:
         MYSQL_DATABASE: 'test'
         MYSQL_USER : 'mysqluser'
         MYSQL_PASSWORD: 'root123'
         MYSQL_ROOT_PASSWORD: 'root123'
      healthcheck:
        test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot123"]
        interval: 5s
        timeout: 5s
        retries: 10
    
    接着修改web服务的依赖条件,仅在MySQL健康检查通过后启动:
    web:
      build: .
      restart: on-failure  
      command: sh -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
      ports:
        - "8000:8000"
      depends_on:
        db:
          condition: service_healthy
    
  • 核对数据库连接参数
    确认settings.py里的配置和docker-compose.yml完全一致:
    • HOST填db(容器间通过服务名通信,对应docker-compose中db服务的名称)
    • PORT用3306(MySQL容器内部端口,不是宿主机映射的3308)
    • 用户名、密码、数据库名要和db服务的环境变量完全匹配

问题2:构建Django镜像时,pip安装依赖失败,报「[Errno -3] Temporary failure in name resolution」

错误表现

执行pip install --upgrade pip和pip install -r requirements.txt时,出现域名解析失败,无法连接PyPI服务器,同时提示pip版本检查出错,镜像构建终止。

问题根源

  • 容器构建阶段网络访问受限,无法解析PyPI的域名
  • Docker默认DNS配置存在问题,导致外部网络请求失败

修复步骤

  • 换用国内PyPI镜像源
    修改Dockerfile,添加国内镜像源(如清华镜像),解决网络访问问题:
    FROM python:3.10
    
    WORKDIR /django_app
    
    ENV PYTHONUNBUFFERED 1
    
    # 配置清华PyPI镜像源
    RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    
    # 先复制requirements.txt,利用构建缓存
    COPY requirements.txt .
    RUN pip install --upgrade pip && pip install -r requirements.txt
    
    # 最后复制整个项目文件
    COPY . .
    
  • 调整Docker的DNS配置
    如果换源后仍无法解析,修改Docker daemon的DNS设置:
    • Linux:编辑/etc/docker/daemon.json,添加以下内容后重启Docker服务:sudo systemctl restart docker
      {
        "dns": ["8.8.8.8", "114.114.114.114"]
      }
      
    • Windows:找到C:\ProgramData\docker\config\daemon.json(无则新建),添加上述内容后重启Docker Desktop
  • 优化Dockerfile构建逻辑
    提前复制requirements.txt,只有当该文件内容变化时才会重新执行pip安装,利用构建缓存提升效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:50:27