WSL2使用“localhost”访问Windows服务

Tim*_*Tim 14 local windows-10 wsl-2

我在 Windows 10 上使用 WSL2。

我的开发堆栈在主机操作系统上使用本地网络服务器(localwp 或 wamp)。我使用 WSL2 作为主终端(SSH、Git、SASS、自动化工具……)。

我需要的是一种使用服务器名称而不是随机 IP 地址从 WSL2 系统连接到我的主机服务 (MySql) 的方法。

Windows 主机已经可以使用“localhost”连接到 WSL2 服务。有没有办法以其他方式做到这一点?

Jon*_*llo 18

您应该使用hostname.localWSL2 访问 Windows,因为这将使用正确的 IP。请注意,应替换为WSL2 中运行的命令hostname的结果。hostname您可以通过从 WSL2 运行来检查 IP ping $(hostname).local

您还需要添加防火墙规则以允许从 WSL2 到 Windows 的流量。在提升的 PowerShell 提示符中运行以下命令:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow
Run Code Online (Sandbox Code Playgroud)

上面的命令应该允许您从 WSL 访问 Windows 公开的任何内容,无论使用哪个端口,但请记住,您启动的任何应用程序都会在您首次启动它们时为其创建自动规则,从而阻止来自公共网络的访问(这是当您收到来自 Windows 防火墙的提示时,询问是否应允许该应用程序接受来自公共网络的连接)。

如果您没有明确允许,它们将默认被阻止,这也会阻止来自 WSL 的连接。因此,您可能需要找到该入站规则,并将其从阻止更改为允许(或只是将其删除)。

请参阅此处的信息:

https://github.com/microsoft/WSL/issues/4585#issuecomment-610061194


Not*_*1ds 5

嗯,你的标题和问题正文似乎不太一致。

问题标题说“使用本地主机”,但在正文中你说“使用服务器名称”。

从 WSL2 通过名称“localhost”访问 Windows 10 服务?我们就说“不”吧。我可以想到如何让它发挥作用,但这会很复杂。

但我认为第二个确实是您正在寻找的,因此我可以想到通过 WSL2 中的主机名访问 Windows 主机服务的几个选项:

  • 首先,也是最简单的,WSL2 支持 mDNS(WSL1 不支持),因此您应该能够访问 Windows 主机{hostname}.local(其中{hostname}是 Windows 主机的名称(字面意思是 bash 中的 ,ping $(hostname).local因为分配的 WSL2 主机名是Windows 10 主机的计算机)。这对我有用。虽然我不记得必须执行任何特殊操作才能启用此功能,但此超级用户答案似乎表明您必须手动打开它。

  • 第二个选项是将您的 Windows 主机 IP 添加到/etc/hosts. 如果您的 Windows IP 是静态的,那么您只需手动添加/etc/hosts即可完成。如果它是动态的,那么您可能需要编写脚本。您可以通过以下方式从 WSL2 内部检索它:

    powershell.exe "(Test-Connection -ComputerName (hostname) -Count 1).IPV4Address.IPAddressToString"(和其他方法)然后使用类似的东西sed来改变/etc/hosts.