请教一下使用 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 没这个功能?

4562 次点击
所在节点    Visual Studio Code
25 条回复
lower
2023-05-16 16:21:00 +08:00
你这应该是把 win 的端口转发到 wsl 里吧?
cogear
2023-05-16 16:23:29 +08:00
@lower 好像这么说也没问题。我的项目在 WSL 中启动运行的, 总之就是 docker -p xxx:3000 那样,让我在 win 中可以访问 wsl 的 3000 端口
xtreme1
2023-05-16 16:24:12 +08:00
wanglz111
2023-05-16 16:27:30 +08:00
1. win 中关闭防火墙
2. win 防火墙中设置针对 wsl 子系统的端口放行
sbabybird
2023-05-16 16:27:47 +08:00
https://github.com/CzBiX/WSLHostPatcher 试一下这个补丁,运行后可以将 wsl 里面的端口都暴露给外部宿主机。访问 localhost 即可。
lower
2023-05-16 16:27:48 +08:00
@cogear 我之前搜到过的一种方式是 win 下用 netsh 命令可以搞,不知道是不是符合你说的场景
cogear
2023-05-16 16:31:45 +08:00
#3 @xtreme1 感谢,这个链接很有用,里面最开头的内容提示我使用虚拟机的 ip 而不是物理机的 ip 。我在 wsl 使用 ifconfig 获得 ip 172.20.194.176 之后, 使用 172.20.194.176:3000 可以访问了。
mmdsun
2023-05-16 16:34:24 +08:00
看下 WSL ip 是多少,用 netsh interface portproxy 命令。

1 、本机把 8080 端口的流量转发到 172.20.73.44 的 3000 端口
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=3000connectaddress=172.20.73.44

2 、查看规则:netsh interface portproxy show all

3 、删除某个规则:netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=88

不过可能有个问题是 WSL 中的 ip 可能会变化,需要设置固定
cogear
2023-05-16 16:41:25 +08:00
@mmdsun 我原以为需要端口转发,
在看了 3 楼发的官方文档后,尝试了一下,直接访问 WSL 的 ip+port 就可以访问,不需要端口转发。

仍然感谢介绍 netsh 的使用。
NX2023
2023-05-16 16:41:58 +08:00
zed1018
2023-05-16 16:45:45 +08:00
正常在 wsl2 里面监听 0.0.0.0 在外面用 localhost 就能访问到
zed1018
2023-05-16 16:46:09 +08:00
cogear
2023-05-16 16:46:38 +08:00
#10 @NX2023 确实,我的 win11 也没法直接通过 localhost 访问 WSL 网络应用,需要使用 WSL 的 ip 访问。会面临 ip 地址变化的情况。
hahastudio
2023-05-16 16:48:54 +08:00
zed1018
2023-05-16 16:49:16 +08:00
如果访问不了,应该是其他故障,这个功能正常来讲就是自动能达到这个效果的。btw ,仅限 localhost ,不能给其他计算机通过 win ip 访问

chronos
2023-05-16 17:07:04 +08:00
正常来说使用 localhost 就可以直接访问,如果出现问题就只能使用 ip 访问了。我的做法是在 wsl 里面写一个 systemd 的 service 在开机时使用脚本添加一个固定的局域网 IP ,并且调用 powershell 给 windows 这边的 WSL 网卡也添加一个同网段的固定 IP ,这样就可以直接通过这个固定 IP 访问到 WSL 了。
cogear
2023-05-16 17:07:54 +08:00
#15 @zed1018 对,根据官方文档,应该是无需设置就可以通过 localhost 访问 WSL 中的 web app 。我去 stackoverflow 看了看,应该是我的防火墙策略被限制了,是被公司通过 group policy 统一配置禁止了。
https://superuser.com/questions/1714002/wsl2-connect-to-host-without-disabling-the-windows-firewall
pota
2023-05-16 17:17:44 +08:00
咦,还真没注意到。我的是自动可以访问的 localhost ip 127 都能,
ivslyyy
2023-05-17 01:39:45 +08:00
会弹提示啊。启动后会弹提示和链接,点就能用。
yuyanglive
2023-05-17 08:39:19 +08:00
试试把端口号调大,我这偶尔会莫名其妙连不上,端口号调大(大于 10000 )就可以,可能是端口号冲突了,没深究。

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

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

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

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

© 2021 V2EX