我在 Windows 10(版本 10.0.19044 Build 19044)主机操作系统上运行了 WSL 2 中的 Ubuntu。
Windows Defender 防火墙已完全禁用。
有什么作用
一个非常基本的Express 应用程序
index.js
:const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(port, () => { console.log(`Example app listening on port ${port}`) })
在 WSL 中,我
npm init
运行.npm i express
node index.js
然后在主机操作系统的浏览器中,我访问 http://localhost:3000 并看到“Hello World!”。
其他 Node 应用程序,例如 EmberJS:
npx ember-cli -- new foo cd foo/ npm start
这将在 WSL 内的端口 4200 上启动一个开发服务器。
然后在主机操作系统的浏览器中,我访问 http://localhost:4200 并看到一个样板应用程序。
什么不起作用
(当然,我首先确保端口可用)
运行节点
http-server
:我从
npx http-server -p 3000
WSL 内部开始。我在主机操作系统中访问 http://localhost:3000 。尽管使用与以前相同的端口和主机,但我看到“连接被拒绝”。
从 WSL 内部,页面确实打开了(例如,使用
links http://localhost:3000
)。运行 Python HTTP 服务器:
我从
python3 -m http.server 4200
WSL 内部开始。我在主机操作系统中访问 http://localhost:4200 。尽管使用与以前相同的端口和主机,但我看到“连接被拒绝”。
从 WSL 内部,页面确实打开了(例如,使用
links http://localhost:4200
)。使用
--remote-debugging-port
.主机操作系统上的 Chrome 无法连接到 WSL 中的无头 Chrome。
我试过的
这些都没有帮助:
- 重新启动。
wsl --shutdown
.- 谷歌搜索。很多。
笔记
例如,当我开始时npx http-server -p 4200
,主机操作系统中资源监视器的网络选项卡中会出现一个条目。它说端口4200
、进程wslhost.exe
、防火墙状态“允许,不受限制”。
然而,我看到了这个:
UPD 1:我已经 ? 好几天了,我看到个人尝试通过了。就像我曾经看到 Chrome Inspector 连接到 WSL 中的无头 Chrome 一样,我曾两次看到http-server
提供索引页面。它尝试了数十次都没有工作,然后突然工作一次,然后又停止工作。
同时,node index.js
使用 Express 和ember serve
100% 可靠并且始终可以从主机操作系统访问,即使在同一个端口上也是如此。
UPD 2:IPv6 不会出现此问题。添加-a ::
到http-server
让我可以通过 IPv6 可靠地连接。那么为什么 IPv4 会失败?!
请帮忙。
这个问题是由 Surfshark VPN 引起的,不管它是否连接。
从主机操作系统卸载 Surfshark 并重新启动解决了我的问题。