pee*_*srj 45 networking windows-subsystem-for-linux
我正在使用 Windows 10,并且将 ubuntu 16.04 安装为 linux 子系统。我在端口 4567 上运行 Rails 应用程序,我想从 Windows 访问它。
我知道一种使用 ip 地址的方法,但ifconfig
没有用。(我试过跑步/sbin/ifconfig
)。这将输出警告为,
Warning: cannot open /proc/net/dev (No such file or directory). Limited output.
我在互联网上搜索,遇到了这个悬而未决的问题。那么有没有其他可行的解决方案呢?
Owe*_*ain 55
这个问题的答案出奇的简单,这就是为什么搜索没有给你正确的结果。
WSL 所做的只是在 Linux 应用程序和 Windows 内核之间提供一个转换层,非常类似于 Wine 在 Linux 上的工作方式。因此,Ubuntu 系统的一些核心部分并不存在,网络就是其中之一。WSL 将 Linux 系统调用转换为 Windows 系统调用,因此 Ubuntu 网络数据流经与 Windows 数据完全相同的 TCP/IP 堆栈。
简而言之,这意味着访问 Linux localhost 您只需访问 windows 本地主机,它们是相同的。localhost:4567
或者127.0.0.1:4567
会做你想做的。
顺便说一句,我一直在 WSL 上使用导轨,它似乎工作得很好,除了摇摆和聆听宝石不能很好地发挥作用,我不得不禁用它们。
Dar*_*ryn 15
我需要从 LAN 中的另一台设备访问我的 WSL 托管端口
(例如用于移动开发),我发现 @Owen Tourlamain 的回答对此没有帮助。
我需要设置portproxy
,而且我发现,使用connectaddress=localhost
或connectaddress=127.0.0.1
做不是为我工作(WSL2时,Windows 10 20H2)。
所以我仍然需要 OP 的问题的答案,事实证明它非常简单:
wsl hostname -I
Run Code Online (Sandbox Code Playgroud)
输出如: 172.10.200.10
注意:
如果您在 powershell 命令中使用内联空格,则必须修剪空格,例如:
netsh interface portproxy add v4tov4 listenport=19000 listenaddress=0.0.0.0 `
connectport=19000 connectaddress=$($(wsl hostname -I).Trim());
Run Code Online (Sandbox Code Playgroud)
今天通过另一个答案提出了一个老问题,所以我插话一下。这个问题最初是针对 WSL1 提出的。虽然 WSL2 的“答案”相同,但仍存在一些需要解决的细微差异。
首先,在 WSL1 上,正如 2016 年最初接受的答案提到的那样,网络实际上是在 Windows 主机接口上运行的。这就是localhost
/ 127.0.0.1
(或 Windows NIC 的地址)在那里工作的原因。
另一方面,WSL2 运行虚拟化,因此网络接口是一个 vNIC,其地址与 Windows 主机的地址不同。该网络实际上是在 Windows 主机后面进行 NAT 的。这也是为什么您可以使用网络上另一台计算机的 Windows IP 地址访问 WSL1 实例,但使用 WSL2 则不行。
但 WSL2 确实有一个称为“本地主机转发”的功能,这使得它像 WSL1 for localhost
/一样工作127.0.0.1
。此功能默认打开,但可以禁用(尽管老实说,我不知道这样做的任何原因)。
此功能允许您访问服务(例如本问题中的 Rails 应用程序)。如果 Windows NIC 上未使用该端口,则 WSL2 会将 localhost 请求自动转发到 WSL2 vNIC 上的同一端口。
那么一切都很好,您可以通过 访问 WSL1 和 WSL2 服务localhost
,对吧?
不幸的是,没那么快。有时,正如其他两个答案所提到的,localhostForwarding
“中断”。我们已经确定了两个非常常见(且相关)的用例,其中会发生这种情况:
解决办法是:
wsl --shutdown
(从 PowerShell、CMD,甚至开始菜单)。虽然完全重新启动 Windows 会产生相同的效果,但速度wsl --shutdown
要快得多。参考这个 SO 答案的评论,这些评论已经确认了问题和解决方案。
归档时间: |
|
查看次数: |
63778 次 |
最近记录: |