**已关闭。**此问题不符合Stack Overflow guidelines。它目前不接受回答。
这个问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为该问题与another Stack Exchange site上的主题相符,您可以发表评论,说明在何处可以回答该问题。
去年关闭。
社区去年审查了是否重新开放这个问题,并将其关闭:
原始关闭原因未解决
Improve this question的
我在 *Windows机器 * 上运行本地AEM服务器。服务器运行在localhost:4502上。我正在使用运行在WSL 2中的Ubuntu发行版进行开发。我想在WSL 2 Ubuntu中访问Windows机器上运行的 localhost:4502。
有没有办法做到这一点,或者是不可能的?
7条答案
按热度按时间cdmah0mi1#
最新Windows版本的简短答案
mDNS作为WSL 2的一个特性已经有一段时间了。将WSL 2
hostname
(或您的编程/语言环境中的等效命令/函数)与".local"
连接起来应该可以访问。例如,在Bash中,请尝试:
字符串
例如,如果您的
hostname
是“我的电脑”,那么mDNS应该是MyComputer.local
。如果ICMP被阻止(就像在新的Windows 11安装上一样),或者如果你想测试到实际端口的连接,那么就使用netcat。默认情况下,它在WSL Ubuntu安装中可用,但可能需要在其他发行版(如openSUSE)中安装:
型
为什么本地主机不起作用
WSL 2与由Windows虚拟机平台(Hyper-V的子集)创建的虚拟网络(vNIC)一起运行。* 在 * WSL 2中,
localhost
是虚拟网卡的地址。你需要什么
WSL 2还在Windows主机上设置了一个虚拟路由器,以允许连接到外部世界和Windows主机。您可以通过以下方式查看:
型
这是您需要用于Windows主机的地址。
当然,您可以从路由中解析它(或者,如前面的答案所示,从
/etc/resolv.conf
中解析),但是WSL使用Windows“计算机名”(也用作WSL示例的主机名)建立了一个方便的mDNS(.local
域)。因此,将
$(hostname)
(或者在您的编程/语言环境中等效的)与".local"
连接应该可以访问。其他注意事项:
/etc/resolv.conf
,则此操作可能不起作用。第一次从WSL 2连接到特定端口时,Windows Defender(如果该端口是防火墙)通常会显示一个对话框,询问您是否要授予访问权限。然而,根据我的经验,这个对话框经常被隐藏在主窗口下,因为鼠标点击、键盘等的时间安排,所以很容易错过。
默认情况下,许多服务器都配置为绑定到
localhost
/127.0.0.1
。由于WSL 2对Windows来说是一个 * 远程 * 网络,因此通常需要更新配置以绑定到0.0.0.0
或特定地址。请注意,由于WSL 2的地址在每次重新引导后都会更改,因此每次都很难更新配置。如果可能,请使用
0.0.0.0
,除非存在安全问题。由于WSL是为 * 开发 * 而不是 * 生产 * 设计的,因此这不应该是一个问题。kqlmhetl2#
我也在寻找一些解决方案来做到这一点,但目前,没有这样的选择可用。看看这个GitHub问题:
https://github.com/microsoft/WSL/issues/4619
一个解决方案可以是:
如果你有Windows(主机)的IP,那么它就可以完成这项工作,但唯一的问题是IP每次都会改变。但是,WSL 2将您的Windows(主机)IP存储在
/etc/resolv.conf
文件中。因此,我们可以修改etc/hosts
,将winhost
动态Map到IP。在
~/.bashrc
文件的末尾添加以下行。这将在 Boot WSL时grep IP并修改etc/hosts
。字符串
然后运行以下命令重新加载更改。
型
现在您可以在WSL 2(客户端)中使用
winhost
而不是localhost
来访问运行Windows(主机)的服务器。在您的情况下,它将是winhost:4502
,但这将适用于任何其他用例,以及访问在Windows上运行的Postgres/MySQL服务器等。**注意:**始终记住在Windows上配置防火墙以允许这些端口,以便WSL 2可以访问,否则您的连接可能会被防火墙阻止。
tjrkku2a3#
这很简单;你只需要做两件事在hosts file中将IP地址设置为 * localhost,并允许Windows Firewall允许传入连接。
以下是分步说明:
1.获取IP地址。打开cmd.exe并键入
ipconfig /all
。记下IP地址172.22.16.1x1c 0d1x的数据
1.以管理员身份打开Notepad,菜单 File → open,浏览到
C:\Windows\System32\drivers\etc\hosts
,添加172.22.16.1 localhost
行,保存并关闭。1.最后一个选项是允许防火墙规则接受公共连接。为此,打开“控制面板” → “系统和安全” → “Windows Defender防火墙” → “高级设置” → “入站规则” → “新建规则”
1.规则类型:选择【端口】,点击【下一步】
1.协议和端口:输入 * 本机具体端口:*4502,点击下一步
1.操作:允许连接并单击下一步
1.配置文件:勾选 * 公共 * 并单击下一步
1.名称:键入 *AEM服务器 * 并单击完成
1.关闭其他窗口,然后再次打开cmd。键入
wsl --shutdown
关闭Ubuntu子系统。1.再次打开Ubuntu。
1.测试连接:在命令提示符中键入
curl localhost:4502
。如果它返回了一些东西,这意味着你可以继续了。jgwigjjp4#
您需要在hosts file中添加IPv6规则。
喜欢的:
字符串
我遇到了一个类似的问题,并在页面 WSL 2 Linux host cannot be accessed by a custom domain name or 127.0.0.1 #5728 找到了解决方案。
f2uvfpb95#
简单的方法:
在Ubuntu命令行中,键入:
字符串
输出量:
型
在应用程序中,将主机配置为:第一个月
现在您可以使用Windows浏览器访问它。
o75abkj46#
Windows 10将localhost视为::1 Ubuntu将localhost视为127.0.0.1
所以解决方法是创建一个Map
在C:\Users .wslconfig中创建一个名为.wslconfig的文件<your_username>
添加以下内容。
字符串
PS:我不知道它是否搞砸了其他事情,但它帮助我运行了升级到wsl2后坏掉的django服务器
cwxwcias7#
我怀疑你能做到。
1.步骤1.在您的实际IP地址(或所有地址)上运行AEM服务器,而不是仅绑定到localhost。
1.步骤2.您的Ubuntu WSL客户端示例不会与主机共享localhost,但它会共享您的机器实际拥有的本地IP地址(例如:10.0.0.2)。只需让您的客户端连接到该IP地址而不是localhost。
1.我对AEM一无所知,但是如果你要将它暴露在一个更大的网络中,你可能需要保护它。阻止上游防火墙上的端口4502,或使用Windows防火墙规则仅允许来自您自己的IP地址的端口4502上的传入。这似乎是可能的。