急救,局域网怎么访问主机 A 的 wsl2 的 docker 的 8080 端口服务

2023-09-21 15:47:20 +08:00
 albert0yyyy

现在情况是 A 是 windows ,有一个 docker 容器,映射到了 A 主机的 127.0.0.1:8080 上,可以正常访问。

现在需要局域网的其它主机访问 A 主机的 docker 容器的 8080 端口服务,该怎么做?

已经试过的方案: 将 windows 入站放开 8080 tcp 端口 然后 windows 的端口 127.0.0.1:8080 转发到 0.0.0.0:8080 上,无法访问

3439 次点击
所在节点    Windows
27 条回复
albert0yyyy
2023-09-21 15:48:07 +08:00
头都大了,容器 ip ,wsl ip ,局域网 ip 已经混了
mmm159357456
2023-09-21 15:51:50 +08:00
直接访问 A:8080 不能访问到吗?如果是 http 服务试试 curl -vk http://A:8080
maocat
2023-09-21 15:56:15 +08:00
能直接访问啊,我 wsl 里 docker 装的数据库,同事电脑能直接访问
tailf
2023-09-21 15:56:35 +08:00
A 的防火墙关闭,直接就是通的,别的机器使用 A 的子网 ip 访问即可
Bingchunmoli
2023-09-21 15:57:17 +08:00
看服务是不是仅监听 127 如果是 0.0.0 不需要操作,如果没有防火墙什么的可以直接访问的
lysS
2023-09-21 15:58:12 +08:00
等新版本的镜像网络吧;
临时就用 vsc 连接 wsl2:安装 wsl 插件,在终端右键选择端口,在端口标签页添加端口映射
klo424
2023-09-21 16:05:51 +08:00
1. 先在主机 A 上访问 telnet 127.0.0.1 8080 ,看是否可以访问,不可访问的话就是 docker 映射的有问题。
2. 再在主机 A 上访问 telnet [A 的 IP] 8080 ,看是否可以访问,不可访问的话就是防火墙的问题。
3. 关闭防火墙,再在主机 A 上访问 telnet [A 的 IP] 8080 ,看是否可以访问,不可访问的话就是有什么代理或者软件拦截了。
4. 再在主机 B 上访问 telnet [A 的 IP] 8080 ,不能访问的话就是网络问题。
5. 以上 4 步都没问题了,就打开防火墙,添加入站规则-放通端口 8080.
kytrun
2023-09-21 16:16:46 +08:00
albert0yyyy
2023-09-21 16:17:59 +08:00
@klo424 停在了第 3 步,关了 clash 应该没有代理的啦。我试了试飞鸽传书,是能局域网使用的
gosidealone
2023-09-21 16:25:00 +08:00
这个我刚好有研究。我的情况是 windows 里面安装了 wsl2 ,wsl2 里面使用了 docker ,要想在局域网访问 windows 的 wsl2 的 docker ,首先 windows 开发端口,再拿到 wsl2 的 ip ,使用命令 netsh interface portproxy add v4tov4 listenport=<本机监听端口> listenaddress=<本机 IP 地址> connectport=<目标机器端口> connectaddress=<目标机器 IP 地址> 目标机器 ip 地址填写 wsl2 的地址就可以了 要管理员权限执行
gosidealone
2023-09-21 16:25:47 +08:00
@gosidealone 然后我就在 mac 能够访问 wsl2 的 docker 启动的服务了
BardOS
2023-09-21 16:30:04 +08:00
自己电脑能访问,别人用你电脑 ip+8080 也能访问呀,防火墙放行这一步就行了
albert0yyyy
2023-09-21 16:31:08 +08:00
@gosidealone #10 wc 可以了,这个命令很关键啊,我不知道 listen 和 connect 填什么
indexphp
2023-09-21 16:53:59 +08:00
cy18
2023-09-21 17:12:12 +08:00
还有个办法,在 Hyper-V 配置里面把 WSL 的网络改成桥接,不错每次重启好像都要重新设置一次。
JayZXu
2023-09-21 17:12:49 +08:00
windows 上起一个 nginx?
thinkershare
2023-09-21 17:14:44 +08:00
@albert0yyyy 新版本的 WSL2 的 docker desktop 的容器应该是不需要这个玩意的。只要防火墙允许入站,监听 host 是 0.0.0.0 或者主机在局域网的 IP 地址,应该局域网的其它机器就能够直接访问。除了你要访问的是安装在 wsl2 上的 linux 内部安装的 docker, 然后在局域网的其它机器上访问,但是那样性能会差很多。
mcluyu
2023-09-21 17:16:13 +08:00
docker desktop 直接用免折腾,wsl 也可以访问
snowlyg
2023-09-21 17:19:33 +08:00
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=172.18.236.240

connectaddress 是你 wsl2 的 ip , 这样就可以通过你电脑 ip 局域网访问 wsl2 内的服务了。
mmdsun
2023-09-21 18:41:06 +08:00
安装个 nginx 映射一下也行。

WSL 2 下个版本就没有这个问题了:
https://www.v2ex.com/t/975098

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

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

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

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

© 2021 V2EX