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

348 天前
 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 没这个功能?

3532 次点击
所在节点    Visual Studio Code
25 条回复
lower
348 天前
你这应该是把 win 的端口转发到 wsl 里吧?
cogear
348 天前
@lower 好像这么说也没问题。我的项目在 WSL 中启动运行的, 总之就是 docker -p xxx:3000 那样,让我在 win 中可以访问 wsl 的 3000 端口
xtreme1
348 天前
wanglz111
348 天前
1. win 中关闭防火墙
2. win 防火墙中设置针对 wsl 子系统的端口放行
sbabybird
348 天前
https://github.com/CzBiX/WSLHostPatcher 试一下这个补丁,运行后可以将 wsl 里面的端口都暴露给外部宿主机。访问 localhost 即可。
lower
348 天前
@cogear 我之前搜到过的一种方式是 win 下用 netsh 命令可以搞,不知道是不是符合你说的场景
cogear
348 天前
#3 @xtreme1 感谢,这个链接很有用,里面最开头的内容提示我使用虚拟机的 ip 而不是物理机的 ip 。我在 wsl 使用 ifconfig 获得 ip 172.20.194.176 之后, 使用 172.20.194.176:3000 可以访问了。
mmdsun
348 天前
看下 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
348 天前
@mmdsun 我原以为需要端口转发,
在看了 3 楼发的官方文档后,尝试了一下,直接访问 WSL 的 ip+port 就可以访问,不需要端口转发。

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

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

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

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

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

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

© 2021 V2EX