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: 10web服务的依赖条件,仅在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
- Linux:编辑
- 优化Dockerfile构建逻辑
提前复制requirements.txt,只有当该文件内容变化时才会重新执行pip安装,利用构建缓存提升效率
内容的提问来源于stack exchange,提问作者avdish
相关产品推荐
相关产品推荐

