我正在我的机器上运行一个本地的AEM服务器。服务器运行在localhost:4502.上我正在使用运行在WSL2中的Ubuntu发行版进行我的开发。我想访问本地主机:在我的WSL2 Ubuntu中运行在Windows机器中的4502。
有没有办法这样做,还是不可能?
发布于 2021-10-01 13:53:28
对大多数最新Windows版本的简短回答
mDNS已经成为WSL2的一个特性已有一段时间了。将您的WSL2 hostname
(或编程/语言环境中的等效命令/函数)与".local"
进行连接应该可以让您访问。
例如,在Bash中,尝试:
ping "$(hostname).local"
例如,如果您的hostname
是"MyComputer",那么mDNS应该是MyComputer.local
。
如果ICMP被阻塞(在新的Windows 11安装上似乎是这样),或者如果您想测试到实际端口的连接,那么使用netcat。它在WSL安装中默认可用,但可能需要安装在其他发行版中,如openSUSE:
nc -zv "$(hostname).local" <portnumber>
为什么本地主机不能工作?
WSL2正在运行一个由(Hyper的子集)创建的虚拟网络(vNIC)。在WSL2内部,localhost
是vNIC的地址。
你所需要的
WSL2还在Windows主机上设置一个虚拟路由器,以允许连接到外部世界和Windows主机。你可以通过以下途径看到这一点:
ip route
这是您需要用于Windows主机的地址。
当然,您可以从路由(或者像前面的答案一样,从/etc/resolv.conf
)解析它,但是WSL使用mDNS "computer name“来设置一个方便的mDNS( .local
域),它也用作WSL实例的主机名。
因此,将$(hostname)
(或者在您的编程/语言环境中是等效的)与".local"
连接在一起应该可以让您访问。
其他考虑因素:
/etc/resolv.conf
,那么这很可能不起作用。。
当第一次从WSL2连接到特定端口时,Windows (如果是防火墙)通常会显示一个对话框,询问您是否要授予访问权限。然而,在我的经验中,由于鼠标点击、键盘等时间的原因,这个对话框常常被隐藏在主窗口下面,因此很容易被忽略。。
默认情况下,许多服务器被配置为绑定到localhost
/127.0.0.1
。因为WSL2在Windows看来是远程网络,所以通常需要更新配置以绑定到0.0.0.0
或特定地址。
注意,由于每次重新启动后WSL2的地址都会发生变化,所以每次更新配置都会很困难。如果有可能,请使用0.0.0.0
,除非存在安全问题。由于WSL是为开发而不是为生产而设计的,这不应该是一个问题。
发布于 2021-06-23 21:00:22
我也在寻找一些解决方案来做到这一点,但目前,没有这样的选项可用。请查看这个GitHub问题:
https://github.com/microsoft/WSL/issues/4619
一种解决方案可以是:
如果您有windows(主机)的IP,那么它将完成工作,但唯一的问题是每次都会更改IP。但是,WSL2将您的windows(主机) IP存储在/etc/resolv.conf
文件中。因此,我们可以修改我们的etc/hosts
来动态地将winhost
映射到IP。
在~/.bashrc
文件的末尾添加以下行。这将在启动WSL时对IP和etc/hosts
进行修改。
export winhost=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
if [ ! -n "$(grep -P "[[:space:]]winhost" /etc/hosts)" ]; then
printf "%s\t%s\n" "$winhost" "winhost" | sudo tee -a "/etc/hosts"
fi
然后运行以下命令重新加载更改。
$ source ~/.bashrc
现在,您可以使用winhost
而不是localhost
在WSL2(客户端)访问运行windows(主机)的服务器。在您的示例中,它将是winhost:4502
,但它将适用于任何其他用例,比如访问运行在windows上的Postgres/MySQL服务器等。
注意:总是记住在windows上配置防火墙以允许那些端口,这样WSL2就可以访问,否则您的连接可能会被防火墙阻塞。
发布于 2021-12-13 19:49:01
您需要在主机文件中添加ipv6规则。
比如:
127.0.0.1 example.com
::1 example.com localhost
我也遇到了类似的问题,并在这个链接上找到了解决方案:https://github.com/microsoft/WSL/issues/5728
https://stackoverflow.com/questions/64763147
复制相似问题