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

Docker环境下Django-REST连接MySQL数据库失败,报"Can't connect to MySQL server"错误求助

Docker环境下Django-REST连接MySQL数据库失败,报"Can't connect to MySQL server"错误求助

嗨,我帮你梳理下问题里的几个关键错误点,应该能解决你的连接问题:

1. 端口配置错误(最核心问题)

MySQL的默认端口是3306,但你在docker-compose.yml的Django服务环境变量里写的是SQL_PORT=5432——这是PostgreSQL的默认端口,完全不匹配!

你需要把neura-dbms-backend服务里的环境变量修改为:

- SQL_PORT=3306

2. 数据库启动就绪问题

depends_on字段只是保证MySQL容器先启动,但不保证MySQL服务已经完成初始化、可以接受连接。Django容器启动时,数据库可能还在初始化,就会抛出连接超时错误。

可以用两种方法解决:

方法一:添加等待脚本

修改Django服务的command,先等待MySQL端口开放再启动服务:

command: [sh, -c, "until nc -z db_neura_dbms 3306; do sleep 1; echo Waiting for MySQL to be ready...; done; python manage.py runserver 0.0.0.0:7000"]

同时需要在你的Dockerfile里添加netcat安装命令(因为slim镜像默认没有nc):

RUN apt update \
&& apt install -y --no-install-recommends python3-dev \
default-libmysqlclient-dev build-essential default-mysql-client netcat \
&& apt autoclean

方法二:使用Docker健康检查

在db_neura_dbms服务中添加健康检查配置,让Django只在MySQL完全就绪后启动:

db_neura_dbms:
  image: mysql:latest
  volumes:
    - mysql_data_db_neura_dbms:/var/lib/mysql/
  environment:
    - MYSQL_DATABASE=db_neura_dbms
    - MYSQL_USER=neura_dbms_user
    - MYSQL_PASSWORD=super_secure_password
    - MYSQL_ROOT_PASSWORD=super_secure_password
  networks:
    - docker-network
  healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
    interval: 5s
    timeout: 5s
    retries: 5

然后修改Django服务的depends_on:

depends_on:
  db_neura_dbms:
    condition: service_healthy

3. 验证其他配置

你的Docker网络配置是正确的(两个服务都在docker-network里),Django的SQL_HOST设置为db_neura_dbms(对应MySQL服务的容器名),这部分没问题,只要上面两个问题修复,连接应该就能正常建立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:17:47