添加networkingMode=mirrored到.wslconfig后Docker连接失败求助
WSL2 启用mirrored网络模式后Docker DNS解析失败的解决方案
问题重现
在Windows的.wslconfig中添加以下配置后:
[wsl2] localhostforwarding=true networkingMode=mirrored firewall=true
执行Docker命令时出现DNS解析错误:
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 127.0.2.3:53: read udp 127.0.0.1:60721->127.0.2.3:53: read: connection refused.
移除networkingMode=mirrored和firewall=true后,Docker拉取镜像、启动容器均正常。手动修改/etc/resolv.conf添加Google DNS会被WSL自动覆盖,无法解决问题。
解决方案
1. 固定WSL2的DNS配置(防止resolv.conf被自动覆盖)
- 在WSL2内部创建/编辑
/etc/wsl.conf文件:
添加以下内容:sudo nano /etc/wsl.conf[network] generateResolvConf = false - 保存退出后,关闭所有WSL实例:
# 在Windows命令提示符/PowerShell中执行 wsl --shutdown - 重新启动WSL2,删除自动生成的resolv.conf:
sudo rm /etc/resolv.conf - 手动创建新的resolv.conf并添加DNS服务器:
sudo tee /etc/resolv.conf <<EOF nameserver 8.8.8.8 nameserver 8.8.4.4 EOF - 给resolv.conf添加只读权限,避免被WSL覆盖:
sudo chattr +i /etc/resolv.conf
2. 调整防火墙设置
- Windows防火墙:检查是否有规则拦截WSL2的DNS请求。可以暂时关闭Windows防火墙测试,如果恢复正常,再添加允许WSL2访问53端口(DNS)的入站/出站规则。
- WSL内部防火墙:检查iptables规则是否拦截DNS流量,执行以下命令查看:
如果存在拦截规则,可临时清空规则测试:sudo iptables -L -nsudo iptables -F
3. 配置Docker Daemon使用指定DNS
- 在WSL2内部创建/编辑Docker守护进程配置文件
/etc/docker/daemon.json:
添加以下内容:sudo nano /etc/docker/daemon.json{ "dns": ["8.8.8.8", "8.8.4.4"] } - 保存退出后,重启Docker服务:
sudo systemctl restart docker
验证
完成以上步骤后,重新执行Docker命令:
docker run --rm -ti -p 80:80 nginx docker compose build
确认镜像拉取和容器启动正常。
内容的提问来源于stack exchange,提问作者deadcoder0904
相关产品推荐
相关产品推荐

