使用WSL2时控制台输出“wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理“

本文介绍了如何在Windows10的WSL22.0.9.0版本中启用镜像模式,并解决从宿主机访问WSLDocker服务的问题,包括添加network-mirrored.service文件以确保网络转发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WSL2版本:2.0.9.0

Windows版本:10.0.22621.2715

1. 打开或创建WSL配置文件(位于C:/User/%你的用户名/.wslconfig),并添加以下内容:

[experimental]
autoMemoryReclaim=gradual  
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

2. 打开命令提示符并执行wsl --shutdown命令。

3. 重新启动wsl就可以了

注意:wsl2版本2.0以前的不支持这个方法

使用镜像模式后,wsl2会自动共享主机的代理,比以前方便了不少。

原文地址

问题:开启了镜像模式后似无法从宿主机中访问wsl中的docker服务

目前找到一个在我的电脑上有效的方法

1. 在wsl内的/etc/systemd/system/目录内添加network-mirrored.service文件,文件内容如下

[Unit]
Wants=network-pre.target
Before=network-pre.target shutdown.target

[Service]
User=root
ExecStart=/bin/sh -ec '\
  [ -x /usr/bin/wslinfo ] && [ "$(/usr/bin/wslinfo --networking-mode)" = "mirrored" ] || exit 0;\
  echo "\
  add chain   ip nat WSLPREROUTING { type nat hook prerouting priority dstnat - 1; policy accept; };\
  insert rule ip nat WSLPREROUTING iif loopback0  ip daddr 127.0.0.1 counter dnat to 127.0.0.1 comment mirrored;\
  "|nft -f -\
'
ExecStop=/bin/sh -ec '\
  [ -x /usr/bin/wslinfo ] && [ "$(/usr/bin/wslinfo --networking-mode)" = "mirrored" ] || exit 0;\
  for chain in "ip nat WSLPREROUTING";\
  do\
    handle=$(nft -a list chain $chain | sed -En "s/^.*comment \\"mirrored\\" # handle ([0-9]+)$/\\1/p");\
    for n in $handle; do echo "delete rule $chain handle $n"; done;\
  done|nft -f -\
'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

2. 在wsl内执行

sudo systemctl --now enable network-mirrored

原文地址

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值