You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加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 -n
    
    如果存在拦截规则,可临时清空规则测试:
    sudo 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 17:41:17