如何从远程主机PC2连接PC1上Docker运行的MySQL服务器?
解决远程连接Docker MySQL容器的问题
核心问题分析
出现connect ETIMEDOUT错误的关键原因有两个:
- 配置中使用了Docker容器的内部IP(
172.17.0.2),该IP仅PC1本地可访问,PC2无法直接路由到这个内部地址 - MySQL默认限制仅本地访问,未授权远程用户连接权限
步骤1:修正Node应用的数据库配置
将配置里的host替换为PC1的局域网/公网IP,port改为Docker映射的宿主机端口3307(容器3306端口已映射到PC1的3307端口):
"development": { "username": "myusername", "password": "mypassword", "database": "bidding", "host": "PC1的局域网/公网IP", // 示例:192.168.1.100 "port": "3307", "dialect": "mysql" }
步骤2:授权MySQL用户允许远程连接
默认MySQL用户仅支持本地访问,需为myusername授权远程连接权限:
- 在PC1上进入MySQL容器:
docker exec -it bidding_mysql mysql -u root -p
输入设置的<password>完成登录。
- 执行授权命令:
- 允许用户从任意IP连接(便捷但安全性稍低):
GRANT ALL PRIVILEGES ON bidding.* TO 'myusername'@'%' IDENTIFIED BY 'mypassword';
- 仅允许PC2的IP连接(更安全):
GRANT ALL PRIVILEGES ON bidding.* TO 'myusername'@'PC2的IP地址' IDENTIFIED BY 'mypassword';
- 刷新权限使设置生效:
FLUSH PRIVILEGES;
步骤3:检查PC1的防火墙设置
确保PC1的防火墙允许3307端口的入站连接:
- Windows:在防火墙高级设置中添加入站规则,允许TCP 3307端口
- Linux:执行
ufw allow 3307/tcp(使用ufw防火墙时),或对应系统的防火墙开放命令
步骤4:验证网络连通性
在PC2上测试与PC1的网络连通性:
# 测试IP可达性 ping PC1的IP # 测试端口是否开放 telnet PC1的IP 3307
若能连通则网络配置正常;若不通,需排查防火墙或网络路由问题。
内容的提问来源于stack exchange,提问作者Hala Omar
相关产品推荐
相关产品推荐

