WSL 2.0中使用networkingMode=mirrored,解决docker转发和外部设备访问问题

运行以下命令将wsl2升级到2.0以上,或者通过github下载

wsl --update --pre-release

在win11的C:\Users\xxx目录下新建.wslconfig文件(xxx根据自己的用户名确定),写入如下内容:

# Settings apply across all Linux distros running on WSL 2
[wsl2]
networkingMode=mirrored # 开启镜像网络
dnsTunneling=true # 开启 DNS Tunneling
firewall=true # 开启 Windows 防火墙
autoProxy=true # 开启自动同步代理
[experimental]
hostAddressLoopback=true

其中hostAddressLoopback 目前处于开发阶段,其作用是:默认情况下,loopback的只有127.0.0.1(i.e., localhost),并且强制loopback。也就是说,在wsl2中开启的网络端口(例如通过8022开启ssh登录端口),会通过localhost映射到win11上,可以在win11宿主机使用ssh -p 8022 username@localhost登录,但是通过win11的局域网或公网IP是不能登录的。将这个选项设置为true之后,就可以在宿主机使用局域网或公网IP通过8022端口直接进行wsl2的ssh登录。

外部设备访问问题

然而,遇到的一个问题是,在同一个局域网下,通过另一台设备ssh到win11的8022端口却不能登录wsl2中运行的Linux。这是因为Hypler-V默认的防火墙阻挡了访问。通过设置Hyper-V防火墙可以解决:使用 WSL 访问网络应用程序 | Microsoft Learn,具体操作如下:

使用管理员权限在 PowerShell 窗口中运行以下命令,以配置Hyper-V防火墙设置,从而允许入站连接:

Set-NetFirewallHyperVVMSetting -Name ‘{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}’ -DefaultInboundAction Allow

官网解决方法案例

在这里插入图片描述

临时解决docker转发

解决方案
使用镜像模式后,创建docker容器后,docker run -d -p 8080:80 nginx,通过localhost:8080无法访问
修改**/etc/docker/daemon.json**

{
    "iptables": false
}
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值