当你在Docker中遇到MySQL连接错误2003时,通常表示Docker容器无法连接到MySQL服务器。以下是常见原因和解决方案:
# 检查MySQL容器是否运行
docker ps | grep mysql
# 如果没有运行,启动MySQL容器
docker start [mysql_container_name]
确保你的应用容器和MySQL容器在同一个Docker网络中:
# 创建网络(如果尚未创建)
docker network create my_network
# 将MySQL容器连接到网络
docker network connect my_network [mysql_container_name]
# 将应用容器连接到同一网络
docker network connect my_network [your_app_container_name]
确保连接字符串正确: - 使用容器名作为主机名(如果在同一网络) - 确认端口号(默认3306) - 检查用户名和密码
# 示例连接字符串
mysql://username:password@mysql_container_name:3306/database_name
确保MySQL配置允许远程连接:
# 进入MySQL容器
docker exec -it [mysql_container_name] bash
# 登录MySQL
mysql -u root -p
# 检查绑定地址
SHOW VARIABLES LIKE 'bind_address';
# 如果需要修改(设置为0.0.0.0允许所有IP连接)
# 需要编辑MySQL配置文件(my.cnf)并重启服务
如果从宿主机连接,确保端口正确映射:
# 检查端口映射
docker port [mysql_container_name]
# 启动时正确映射端口示例
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 检查宿主机防火墙
sudo ufw status
# 临时允许MySQL端口
sudo ufw allow 3306
# 从另一个容器测试连接
docker run -it --rm --network my_network mysql mysql -h mysql_container_name -u root -p
错误:Host '172.17.0.1' is not allowed to connect to this MySQL server
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
FLUSH PRIVILEGES;
错误:Connection refused
错误:Too many connections
SET GLOBAL max_connections = 200;
如果问题仍然存在,请提供具体的错误信息和你的Docker配置,我可以提供更针对性的解决方案。