Docker部署的容器化MySQL数据库无法被局域网用户远程访问求助
局域网Docker容器MySQL无法远程访问排查解决步骤
错误码ERROR 2003 (HY000)的110错误为连接超时,属于网络层面不通,你本地及自行用局域网IP可正常访问说明MySQL权限配置无问题,按以下步骤排查即可:
- 第一步:确认WSL内Docker容器端口绑定正确
进入Ubuntu终端执行docker ps,查看对应mysql容器的PORTS列,需确认显示为0.0.0.0:3306->3306/tcp,如果仅绑定了127.0.0.1:3306,需要重新启动容器时指定绑定所有地址:docker run --name=mysqlproject -e MYSQL_ROOT_HOST=% -p 0.0.0.0:3306:3306 -d mysql/mysql-server - 第二步:排查WSL2 NAT模式端口转发规则
WSL2默认采用NAT网络,Windows需要做端口转发才能将局域网流量转发到WSL内部:- 在Ubuntu终端执行
ip a,查看eth0网卡的IP地址(通常为172开头的私网地址) - 在Windows cmd执行
netsh interface portproxy show all,确认存在监听0.0.0.0:3306、转发到上述WSL IP 3306端口的规则 - 如无对应规则可手动添加,命令为:
如果无权限修改Windows端口代理,可将WSL2调整为桥接模式:在Windows用户目录下创建netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3306 connectaddress=<替换为WSL的eth0 IP> connectport=3306.wslconfig文件,写入以下配置后执行wsl --shutdown重启WSL即可,重启后WSL会直接获取和主机同网段的局域网IP,其他用户直接访问该WSL IP的3306端口即可:[wsl2] networkingMode=bridged vmSwitch=<替换为你主机Wifi对应的虚拟交换机名称> - 在Ubuntu终端执行
- 第三步:放通WSL内部防火墙
在Ubuntu终端执行sudo ufw status,如果防火墙为开启状态,执行以下命令放通3306端口:sudo ufw allow 3306/tcp - 第四步:绕路解决方案(无权限修改系统配置时可用)
可通过SSH端口转发实现访问:其他局域网用户执行以下命令,将本地3306端口映射到你主机的3306端口,之后本地访问127.0.0.1:3306即可连接MySQL:ssh -L 3306:127.0.0.1:3306 <你的Windows用户名>@<你的主机局域网IP>
内容的提问来源于stack exchange,提问作者dendio
相关产品推荐
相关产品推荐

