请教一下使用 VSCode 连接 WSL 开发,怎么将 WSL 中的端口号转发出来以在 win 下访问?

2023-05-16 16:17:43 +08:00
 cogear

项目在 WSL 启动之后,监听 3000 端口,在宿主 win 中没法直接访问。

started server on 0.0.0.0:3000, url: http://localhost:3000

网上给出的解决方案是 Remote Explorer 中可以编辑端口映射,但是我并没有找到,

Control Shift + P 搜索 Port 或者 Forward 关键字也没搜索到相关的。


我记得之前连接到 docker container 中会有 port forward 的,是因为直接连 wsl 没这个功能?

4564 次点击
所在节点    Visual Studio Code
25 条回复
xmsz
2023-07-28 10:44:30 +08:00
我记录一下刚刚的情况

我 wsl2 开了第一个服务,宿主 localhost 访问不了,但是通过 netsh interface portproxy(connectaddress=172.17.187.118),宿主可以访问了,但是手机(局域网其他设备)访问不了

我 wsl2 又开了一个服务,这个时候宿主 localhost 可以访问,但是其他手机还是不行



然后各种调试,还是不行

最后居然可以了... 我已经蒙圈了,完全不记得是什么影响的

可能的操作
- 防火墙,设置通过应用?开了 hy, 还要其他啥的
- 防火墙,关闭了开放
xmsz
2023-07-28 12:50:17 +08:00
@xmsz 然后我发现 localhost 能不能访问 主要是因为端口是否被占用?
cogear
2023-07-28 15:24:08 +08:00
@xmsz #21
你说的应该是两个问题,即本机访问 wsl2 的服务和局域网访问 wsl2 的服务。

1. 对于本机访问,
你的问题是端口号被占用,我不是。
我首先确认在端口号无使用的情况下,

当 wsl2 内有进程开启网络服务/监听某个端口时,我自己的电脑,会看到 windows 中也自动开启了一个叫做 wslhost.exe 的进程,监听了同样的端口,于是我可以在 windows 中直接通过 localhost 访问 wsl2 中的服务了。

但是公司的电脑不行。因为它就没有 wslhost.exe 的进程。

上面这个问题我不确定公司的电脑有做了什么限制。

2. 对于局域网访问
我注意到,wslhost.exe 默认监听的是 loopback 地址,所以,只能在本机访问,局域网内的其他设备无法访问。

文档也提到了 LAN 局域网访问的情况:
https://learn.microsoft.com/zh-cn/windows/wsl/networking
wsl2 默认是无法通过局域网访问的,你使用 netsh interface portproxy 应该是做转发开启了局域网访问。
xmsz
2023-08-13 13:28:51 +08:00
我还发现一个很蛋疼的情况 有点端口可以直接通 有点不行 比如 3000 因为这个宿主默认占有了...
cogear
2023-08-14 08:27:27 +08:00
@xmsz #24 是的,被宿主占用的端口无法直连

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/940456

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX