WSL2无法直接访问Windows的localhost网络,但WSL2 2.0通过引入镜像网络解决了这一问题。
WSL1与WSL2的区别: WSL1是基于代理的虚拟化技术,而WSL2则使用了真正的虚拟机技术,在Windows主机上运行一个轻量级的Linux内核。

WSL2网络架构问题: WSL2使用虚拟网络适配器与Windows主机通信,导致无法直接访问Windows的localhost网络。

解决思路

WSL2 2.0的解决方案: 引入镜像网络,使WSL2和Windows主机使用相同网络,通过localhost访问本机系统上的服务。
配置WSL2: 在Windows资源管理器中创建.wslconfig文件,并设置相关参数,如内存、CPU核心数、localhost转发等。
重启WSL服务: 以管理员身份运行PowerShell,先停止WSL服务,再启动WSL服务,以便应用新的配置。
访问宿主机服务: 在WSL中使用curl http://localhost命令访问宿主机上的服务。
查看宿主机IP: 在WSL中使用cat /etc/resolv.conf命令查看宿主机的IP地址。

具体为:

第一步:添加配置

在Windows的资源管理器的地址栏输入: %UserProfile% ,即可打开当前用户的主目录,创建文件:.wslconfig:

[wsl2]
memory=4GB                        # 分配给 WSL 2 的内存大小
processors=2                      # 分配给 WSL 2 的 CPU 核心数
localhostForwarding=true          # 是否启用 localhost 转发
 
[experimental]
autoMemoryReclaim=gradual         # 开启自动回收内存,可在 gradual, dropcache, disabled 之间选择
networkingMode=mirrored           # 开启镜像网络
dnsTunneling=true                 # 开启 DNS Tunneling
firewall=true                     # 开启 Windows 防火墙
autoProxy=true                    # 开启自动同步代理
sparseVhd=true                    # 开启自动释放 WSL2 虚拟硬盘空间

第二步:管理员身份运行PowerShell:

停止WSL: wsl --shutdown
启动WSL: wsl

之后就可以在 wsl 中使用 localhost 的方式来访问宿主机上的服务了。

标签: 网络