现在情况是 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 上,无法访问
1
albert0yyyy OP 头都大了,容器 ip ,wsl ip ,局域网 ip 已经混了
|
2
mmm159357456 2023-09-21 15:51:50 +08:00
直接访问 A:8080 不能访问到吗?如果是 http 服务试试 curl -vk http://A:8080
|
3
maocat 2023-09-21 15:56:15 +08:00
能直接访问啊,我 wsl 里 docker 装的数据库,同事电脑能直接访问
|
4
tailf 2023-09-21 15:56:35 +08:00
A 的防火墙关闭,直接就是通的,别的机器使用 A 的子网 ip 访问即可
|
5
Bingchunmoli 2023-09-21 15:57:17 +08:00 via Android
看服务是不是仅监听 127 如果是 0.0.0 不需要操作,如果没有防火墙什么的可以直接访问的
|
6
lysS 2023-09-21 15:58:12 +08:00
等新版本的镜像网络吧;
临时就用 vsc 连接 wsl2:安装 wsl 插件,在终端右键选择端口,在端口标签页添加端口映射 |
7
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. |
8
kytrun 2023-09-21 16:16:46 +08:00
|
9
albert0yyyy OP @klo424 停在了第 3 步,关了 clash 应该没有代理的啦。我试了试飞鸽传书,是能局域网使用的
|
10
gosidealone 2023-09-21 16:25:00 +08:00 2
这个我刚好有研究。我的情况是 windows 里面安装了 wsl2 ,wsl2 里面使用了 docker ,要想在局域网访问 windows 的 wsl2 的 docker ,首先 windows 开发端口,再拿到 wsl2 的 ip ,使用命令 netsh interface portproxy add v4tov4 listenport=<本机监听端口> listenaddress=<本机 IP 地址> connectport=<目标机器端口> connectaddress=<目标机器 IP 地址> 目标机器 ip 地址填写 wsl2 的地址就可以了 要管理员权限执行
|
11
gosidealone 2023-09-21 16:25:47 +08:00
@gosidealone 然后我就在 mac 能够访问 wsl2 的 docker 启动的服务了
|
12
BardOS 2023-09-21 16:30:04 +08:00
自己电脑能访问,别人用你电脑 ip+8080 也能访问呀,防火墙放行这一步就行了
|
13
albert0yyyy OP @gosidealone #10 wc 可以了,这个命令很关键啊,我不知道 listen 和 connect 填什么
|
14
indexphp 2023-09-21 16:53:59 +08:00
|
15
cy18 2023-09-21 17:12:12 +08:00
还有个办法,在 Hyper-V 配置里面把 WSL 的网络改成桥接,不错每次重启好像都要重新设置一次。
|
16
JayZXu 2023-09-21 17:12:49 +08:00
windows 上起一个 nginx?
|
17
thinkershare 2023-09-21 17:14:44 +08:00
@albert0yyyy 新版本的 WSL2 的 docker desktop 的容器应该是不需要这个玩意的。只要防火墙允许入站,监听 host 是 0.0.0.0 或者主机在局域网的 IP 地址,应该局域网的其它机器就能够直接访问。除了你要访问的是安装在 wsl2 上的 linux 内部安装的 docker, 然后在局域网的其它机器上访问,但是那样性能会差很多。
|
18
mcluyu 2023-09-21 17:16:13 +08:00
docker desktop 直接用免折腾,wsl 也可以访问
|
19
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 内的服务了。 |
20
mmdsun 2023-09-21 18:41:06 +08:00 via iPhone 1
|
21
lazycat 2023-09-21 20:54:26 +08:00
|
22
zed1018 2023-09-21 22:01:56 +08:00
倒也不用填 wsl 的 ip ,毕竟那个是变的,最好是用 v4tov6 的转发 0.0.0.0 -> ::1
|
23
ppqqows 2023-09-22 10:01:22 +08:00
去 hyper-v 虚拟机管理里面,建立一个桥接接口,
然后编辑 C:\Users\UserName\.wslconfig [wsl2] # Bridged network networkingMode = bridged vmSwitch = lanBridge 这个特性不知道是那个版本加进来的,我是 22H2 ,可以桥接网络,代价就是 wsl2 启动更慢了。 或者加入预览版 wsl2 2.0 ,有 mirror 模式的网络 |
24
yinmin 2023-09-22 10:21:50 +08:00 via iPhone
如果 windows 生产环境使用 docker ,最佳方式是 hyper-v + debian + docker ,然后网络做桥接
|
25
WenkanEdward 2023-10-14 10:49:25 +08:00
新的 wsl 可以直接使用 windows 端口和代理了。https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/
|
26
Ccf 316 天前 via iPhone
mark ,win11 下 wsl2+debian+docker emby 也遇到局域网不能访问的情况
|
27
Ccf 314 天前
@gosidealone @snowlyg 查看 wsl2 的命令 ip addr show eth0
netsh interface portproxy add v4tov4 listenport=8096 listenaddress=0.0.0.0 connectport=8096 connectaddress=<wsl2 的地址> 终于搞定了 emby 的网络问题,感谢两位 |