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

排查过程

  1. 确认docker容器是否正常映射了端口

docker port 容器id
#下面是命令行输出
test@123:~$ docker port 156788b590b3
3306/tcp -> 0.0.0.0:3306
3306/tcp -> [::]:3306

看起来似乎没什么毛病!

  1. 确认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
作者
sora
发布于
2024年07月03日
许可协议