Windows下WSL中Docker映射端口无法访问
问题
在wsl中安装了docker,安装了mysql和其他服务,端口映射到0.0.0.0和::1后,localhost无法访问对应端口。
原因
docker 开启了防火墙,外网访问端口被防火墙拦截了
解决方案
1. 在服务器中修改
在 /etc/docker/daemon.json
文件中增加 "iptables": false
去掉防火墙
没有则创建 /etc/docker/daemon.json
文件
{
"iptables": false
}
重启docker
service docker restart
2. 设置host
把容器的网络模式设置为 host
,再启动容器即可
network: host
排查过程
确认docker容器是否正常映射了端口
docker port 容器id
#下面是命令行输出
test@123:~$ docker port 156788b590b3
3306/tcp -> 0.0.0.0:3306
3306/tcp -> [::]:3306
看起来似乎没什么毛病!
确认wsl/linux内部 是否正确监听了3306端口
test@123:~$ netstat -anut | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::3306 :::* LISTEN
端口监听也正常 ,懵逼了,那为什么 localhost, 127.0.0.1 ,甚至我的各种ip都访问不到?
难道是肾透支了? wsl和docker通信有问题? 于是我重新开了一个nginx,映射端口80到docker的80,网络设置的brige,外网仍旧无法访问。
but! 我在wsl内部 curl http://localhost
是正常的,该返回什么就是什么,没有一点毛病。
那就再来一个!直接设置网络为host ,端口随便开了一个,外网访问正常了!?😢
好吧,基本可以确定就是网络问题,设置为host就能解决,但是我不想设置为host,那样改动太麻烦(有其他容器端口冲突)
面向百度编程ing......
EMM 搜了太多,最后试了一下把docker的防火墙关闭,外网访问正常了。。。
Windows下WSL中Docker映射端口无法访问
https://lysowc.cn/archives/1719979088049