VMware中CentOS7虚拟机Docker部署MySQL远程连接报错排查求助
排查MySQL远程连接错误
lost connection to server at 'handshake: reading initial communication packet', system error: 60 以下是分步排查方案:
1. 核对VMware NAT端口映射配置
- 打开VMware「虚拟网络编辑器」,选中NAT模式网卡(通常为VMnet8),进入「NAT设置」
- 确认端口映射规则:主机端口(如3306)需映射到虚拟机实际IP的对应端口(即Docker容器映射到宿主机的端口,比如3306)
- 用虚拟机内的
ip addr命令查看当前IP,确保规则中的虚拟机IP与实际一致(避免DHCP动态分配导致IP变更)
2. 检查CentOS7防火墙与SELinux拦截
- 防火墙排查:
- 临时关闭防火墙测试:
systemctl stop firewalld,若连接恢复,说明是防火墙拦截,需添加永久放行规则:firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload - 用
firewall-cmd --list-all查看当前规则,确认目标端口已在放行列表中
- 临时关闭防火墙测试:
- SELinux排查:
- 临时关闭测试:
setenforce 0,若连接成功,可修改SELinux配置为宽容模式:编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive,重启虚拟机生效
- 临时关闭测试:
3. 验证Docker容器的MySQL配置
- 启动参数检查:
确保容器启动时绑定了所有网卡,docker-compose.yml或启动命令需包含--bind-address=0.0.0.0,或在容器内的my.cnf中配置bind-address = 0.0.0.0(避免仅绑定127.0.0.1导致无法远程访问) - 远程用户权限:
进入MySQL容器,创建并授权远程访问用户:CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%'; FLUSH PRIVILEGES; - 容器日志与端口映射:
- 查看容器日志排查异常:
docker logs <mysql-container-name> - 确认Docker端口映射正确:如
-p 3306:3306,确保容器内3306端口映射到了虚拟机的3306端口
- 查看容器日志排查异常:
4. 分层连通性测试
- 虚拟机内部测试:在CentOS中执行
mysql -h 127.0.0.1 -P 3306 -u your_user -p,若连不上,优先排查容器内MySQL的配置问题 - 宿主机到虚拟机连通性:在本地宿主机执行
ping <虚拟机IP>,若不通,检查VMware虚拟网络编辑器的DHCP、NAT设置是否正常 - 端口可达性测试:用
telnet <虚拟机IP> 3306或nc -zv <虚拟机IP> 3306测试端口,若不通,回到防火墙、端口映射步骤重新排查
5. 客户端连接参数校验
- 客户端需使用宿主机IP(或localhost) + NAT映射的主机端口连接,而非虚拟机IP和端口
- 例如:若NAT映射规则是主机3307→虚拟机3306,客户端连接地址应为
localhost:3307或<宿主机公网/局域网IP>:3307 - 强制客户端使用TCP/IP连接模式,避免默认的socket连接(部分客户端会自动选择socket导致失败)
内容的提问来源于stack exchange,提问作者sopp
相关产品推荐
相关产品推荐

