V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
albert0yyyy
V2EX  ›  Windows

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

  •  1
     
  •   albert0yyyy · 2023-09-21 15:47:20 +08:00 · 3311 次点击
    这是一个创建于 430 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在情况是 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 条附言  ·  2023-09-21 16:32:04 +08:00
    已解决
    感谢 10 楼 @gosidealone
    附上他的原话

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

    WSL 2 下个版本就没有这个问题了:
    https://www.v2ex.com/t/975098
    lazycat
        21
    lazycat  
       2023-09-21 20:54:26 +08:00
    zed1018
        22
    zed1018  
       2023-09-21 22:01:56 +08:00
    倒也不用填 wsl 的 ip ,毕竟那个是变的,最好是用 v4tov6 的转发 0.0.0.0 -> ::1
    ppqqows
        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 模式的网络
    yinmin
        24
    yinmin  
       2023-09-22 10:21:50 +08:00 via iPhone
    如果 windows 生产环境使用 docker ,最佳方式是 hyper-v + debian + docker ,然后网络做桥接
    WenkanEdward
        25
    WenkanEdward  
       2023-10-14 10:49:25 +08:00
    Ccf
        26
    Ccf  
       316 天前 via iPhone
    mark ,win11 下 wsl2+debian+docker emby 也遇到局域网不能访问的情况
    Ccf
        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 的网络问题,感谢两位
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:15 · PVG 05:15 · LAX 13:15 · JFK 16:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.