最近踩了一个挺隐蔽的坑,简单记录一下。
一、问题现象
本地用 Docker Desktop(Windows + WSL2) 跑服务:
- 容器正常运行,端口映射正常,本机也能正常访问
- 其他人 / 局域网访问不了
Docker配置和防火墙看了一圈,都没发现问题。
二、原因
后来才发现,是自己之前改过WSL的网络配置 ,在 C:\Users\qianccc\.wslconfig 里
ini
[wsl2]
networkingMode=mirrored
这个配置把WSL2的网络模式从默认的NAT 改成了mirrored(镜像宿主网络)。
问题在于:Docker Desktop是跑在WSL2里的,而Docker的端口映射依赖WSL2默认的NAT转发机制,改成 mirrored 后,这套转发链路被绕开,导致端口只在本机可用,外部访问不到
然后查了一下自己可能改掉WLS默认的网络配置的原因:
- 自己电脑ip经常变,导致Docker和本机经常网络不通
- 在使用VPN的时候,WSL和Docker的网络经常异常
三、解决方案
把 WSL 网络模式改回默认即可。
修改 .wslconfig:
ini
[wsl2]
networkingMode=nat
然后执行:
bash
wsl --shutdown
最后重启 Docker Desktop,端口对外访问就恢复正常了🎉