windows - 在 Windows 和 WSL 应用程序之间共享网络

标签 windows ubuntu networking windows-subsystem-for-linux

我在 WSL 之上使用 Windows 10 和 Ubuntu。 Eclipse 和 Code 等工具作为传统 Windows 应用程序运行。我开发的服务器运行在 WSL 上;他们启动 Tomcat 和 NodeJS 服务器。问题是 Windows 看不到 Ubuntu 端口,WSL 也看不到 Windows 服务。

我相信 WSL 的启动就像它是一台单独的机器一样,因此具有不同的端口。是否可以让它共享主机网络?理想情况下,如果我在 Window 控制台中运行 netstat,我会看到 Tomcat 和 Node 服务器在 WSL 下启动,反之亦然。如果没记错的话,如果我使用 VirtualBox 将 Ubuntu 作为 VM 运行,这将是可能的。

我对 Docker 有类似的问题,但在这种情况下,我特别感兴趣的是与 Docker 无关的服务。

跟进:根据以下问题,我有 WSL 2:

wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Running 2 openSUSE-Leap-15-1 Stopped 2 docker-desktop-data Running 2 fedoraremix Stopped 2 docker-desktop Running 2

最佳答案

听起来您正在运行 WSL2,因为正如 Woodsman 在评论中提到的,在 WSL1 下运行的网络服务似乎在 Windows 主机网络本身上运行。

在 WSL2 中,实例在 Hyper-V VM 中运行,该虚拟机具有在 Windows 主机后面进行 NAT 的虚拟 NIC。但是,Windows 主机本身应该可以通过 localhost 直接访问实例中运行的服务。 WSL 似乎进行了一些自动端口转发,但仅限于从本地 Windows 主机到 WSL 实例。

换句话说,您本地网络上的其他机器将看不到 WSL 网络服务,除非您按照类似 this comment 的方式执行一些端口转发(和防火墙规则)。在关于该主题的 Github 线程中。同样,只有当您尝试从网络上的其他地方(例如您的手机)访问 WSL 网络应用程序时,这应该才是必需的。但是,遵循这些步骤也会产生解决下一个问题的副作用。

这个问题是 WSL 下的 localhost 自动转发似乎在(至少)几种情况下崩溃了。如果是这种情况,并且您无法通过 localhost:port 访问您的节点或 Tomcat 服务器,请参阅 this answer寻求建议。快速 wsl --shutdown 很可能会解决(即使您已重新启动)。如果问题再次出现,可能是由于休眠,或者 Windows 关闭/重新启动并启用了快速启动功能(也执行“部分”休眠)。

你还提到你无法从 WSL 看到 Windows 网络服务,尽管你在那里给出的例子是 VSCode 和 Eclipse,这对我来说有点不协调,因为它们是编辑器而不是网络应用程序/服务。

但假设您在 Windows 上运行 Maria DB,并且您想从 WSL2 内部访问它。 localhost 在这种情况下将不起作用,因为 localhost 是 WSL 子系统的虚拟 NIC。为此,请参阅 this answer -- 简短的总结是尝试 mDNS(mywindowscomputername.local,将第一部分替换为您的计算机名称)或通过命令获取 Windows 的主机 IP。当我写下那个答案时我没有意识到这一点(我应该回去编辑它),但是据报道 windowscomputername.mshome.net 也可以工作。

关于windows - 在 Windows 和 WSL 应用程序之间共享网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66328807/

相关文章:

c++ - 识别 C 和 C++ 函数之间逻辑相似性的工具

c++ - 如何在不打开的情况下获得最大文件的大小?

linux - 在 Linux 上作为后台进程运行时 Nutch 爬网失败

linux - 如何在 ubuntu bash 中访问 Windows 目录

Docker:复制失败:在构建上下文中找不到文件(Dockerfile)

c - 用 C 编写非常简单的网络服务器 - 浏览器挂起

c - 路由设置 : SIOCADDRT failed: Inappropriate ioctl for device

linux - 开发环境中的Docker

sockets - gcloud 计算 : configure firewall for external traffic

python - 重新启动后Pyserial的串行连接问题