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

Docker环境下Django连接MySQL报(2006)错误求助

解决Docker Compose中Django无法连接MySQL的问题

核心问题修复:修正数据库连接的HOST配置

你的Django容器现在尝试连接127.0.0.1,但在Docker的网络环境里,每个容器都是独立的网络节点,127.0.0.1指向的是Django容器自身,而非MySQL容器。Docker Compose会自动为所有服务创建一个共享网络,每个服务的名称(比如你配置里的db)就是该容器的可解析主机名。

修改settings.py中的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ProjetDjango',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'db',  # 将127.0.0.1替换为db服务名
        'PORT': '3306',
    }
}

额外优化:等待MySQL服务完全就绪

虽然你配置了depends_on: -db,但Docker只会保证db容器先启动,不会等待MySQL服务完成初始化。如果Django在MySQL还没准备好时就尝试连接,依然会抛出连接拒绝的错误。

可以在web服务的启动命令中添加等待逻辑,确保MySQL服务就绪后再执行Django的初始化命令:
修改docker-compose.yml中web服务的command:

command: bash -c "until nc -z db 3306; do sleep 1; done; python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py collectstatic --noinput && gunicorn hello_django.wsgi -b 0.0.0.0:8000"

注意:如果容器中没有nc(netcat)工具,需要在Dockerfile中添加安装命令:RUN apt-get install -y netcat

最后检查几个关键点

  1. 确认docker-compose.yml中MySQL的环境变量和Django配置完全匹配:
    • MYSQL_DATABASE: ProjetDjango和Django里的NAME一致
    • MYSQL_PASSWORD: root和Django里的PASSWORD一致
  2. 确保你的project目录挂载到/src后,Django的manage.py确实在该路径下,避免启动命令找不到文件

完成以上修改后,重新执行docker-compose up --build,应该就能正常连接MySQL了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:42:17