修复 WSL2 镜像网络模式下无法连接 Docker 的问题
2 min read
问题
在 2023 年 9 月的 Windows 11 更新中,WSL2 支持了新的网络模式:镜像(mirrored)。它能够通过 localhost 地址从 WSL2 内部连接到 Windows 的 127.0.0.1 地址。
可以在 %UserProfile%/.wslconfig 添加 networkingMode=mirrored 来启用它。
但是这会导致无法连接到 Docker 的问题:dial tcp 127.0.0.1:3306: connect: connection refused。
该问题的原因是 Docker 使用了 iptables 来转发端口。
可以通过以下方法来修复这个问题。
使用 Docker Desktop
方法 1
直接将 Docker Desktop 升级到 4.26 以上版本即可,该版本添加了对镜像网络模式的支持。
方法 2
或者在 .wslconfig 中添加:
[experimental]
networkingMode=mirrored
hostAddressLoopback=true
ignoredPorts = 8000,8080
通过 ignoredPorts 来设置你需要访问的应用的端口。
使用其它 Docker 发行版
在 .wslconfig 中添加:
[experimental]
networkingMode=mirrored
hostAddressLoopback=true
并且编辑 docker 配置文件:/etc/docker/daemon.json,添加:
{
"iptables": false
}
缺点是这样无法使用 iptables。
参考链接
WSL 2.0: networkingMode=mirrored makes Docker unable to forward ports #10494