具有和不具有 Hyper-V 功能的 WSL2,无需与发行版进行外部连接,能够从主机 ping 发行版

具有和不具有 Hyper-V 功能的 WSL2,无需与发行版进行外部连接,能够从主机 ping 发行版

我在使我的 WSL2 发行版建立任何网络连接时遇到了问题。

之前我使用 WSL1 运行 1809 没有任何问题。

更新至 1903 并安装 WSL2 反向移植 KB。启用虚拟机平台功能。更新内核。将默认版本设置为 2。转换现有发行版。将 Docker Desktop 更新至最新版本并启用 WSL2 作为后端。

vEthernet 适配器 WSL 具有 192.168.97.129 IP,发行版中的 ip 地址 192.168.97.130 能够从主机 ping 通发行版,但不能反过来。

尝试了有关 netsh 的所有建议,但均未成功。https://www.reddit.com/r/bashonubuntuonwindows/comments/hdkohj/networking_not_working_on_wsl2/

确认我没有启用 VPN

安装了新的发行版以排除旧的转换不会导致问题,不幸的是没有任何改善,情况相同。

关闭 Hyper-V 功能并重试。注意到 vEthernet Adapter WSL 现在有一个 172.18.61.97 范围内的 IP,发行版中的 IP 地址为 172.18.61.98。Ping 仍然有效,可以从主机 ping WSL2 发行版,但反过来不行。

Windows 计算机使用本地 Wifi,IP 为 192.168.10.X。

卸载了 Docker Desktop + 禁用了虚拟机平台和 WSL 功能并进行了重启循环,然后再次安装了两者,但情况仍然是相同的。

使用带有 WSL2 后端的 docker 桌面从 VS-Code 启动远程容器,我能够使用 host.docker.internal(解析为 192.168.65.2)从容器内部 ping 到主机。我还可以 ping 外部,例如 8.8.8.8。

运行 python 远程容器的示例 repo 会在 0.0.0.0:9000 上启动一个 flask 服务器,我无法从主机上的 chrome 访问该服务器。

从 Windows 命令行运行 curl 到 127.0.0.1:9000 会出现“正在读取网络响应”但没有任何进展的情况。

容器的终端输出为空

运行 curl 127.0.0.1:9001给出:curl:未找到在服务器上未找到请求的 URL。

容器的终端输出:127.0.0.1 - - [04/Sep/2020 12:22:06] "GET / HTTP/1.1" 404 -

更新2020-09-14: 在 Docker 论坛上发布了一个问题:https://forums.docker.com/t/docker-desktop-wsl2-and-visual-studio-code-clarifications-on-how-when-wsl2-is-involved/98660

更新2020-09-07: 昨天在 github 上添加了一个 WSL2 问题,因为这里的反馈率较低。https://github.com/microsoft/WSL/issues/5862

更新: 更新至 1909 并再次安装反向移植 KB 与 1903 的情况完全相同,没有任何改善。

如果我连接到 docker-desktop 发行版并尝试 ping,则无法访问任何网络。另一方面,docker-desktop 发行版中运行的容器可以很好地进行外部 ping。

更新:2021-01-14

更新到 2004 并没有改变任何东西,追求使用 WSL2 的 Docker 确实有回报,发现https://github.com/sakai135/wsl-vpnkit并安装,这个方法奏效了。即使没有活动的 VPN 连接,VPN 软件中也可能激活了一些防火墙规则。无论我是否有活动的 VPN 连接,此解决方案都能正常工作。

关于如何查找故障的建议?

相关内容