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

求教如何在局域网内访问基于 wsl 的 docker

  •  
  •   miotando · 298 天前 · 2547 次点击
    这是一个创建于 298 天前的主题,其中的信息可能已经有所发展或是发生改变。

    宿主机: win11, 启用了 wsl 2.0.0, 在 windows 中安装了 Docker WSL 2 backend.

    wsl 2.0.0 启用了 networkingMode=mirrored, 所以 wsl 内使用 ifconfig 和 windows 中得到的结果是一样的, 本机 ip 192.168.31.132

    现在以如下指令启动了 AutoBangumi:

    docker run -d \
      --name=AutoBangumi \
      -v ${HOME}/AutoBangumi/config:/app/config \
      -v ${HOME}/AutoBangumi/data:/app/data \
      -p 7892:7892 \
      -e TZ=Asia/Shanghai \
      -e PUID=$(id -u) \
      -e PGID=$(id -g) \
      -e UMASK=022 \
      --network=bridge \
      --dns=8.8.8.8 \
      --restart unless-stopped \
      ghcr.io/estrellaxd/auto_bangumi:latest
    

    查看日志可以发现已经开始监听 7892 端口: [2024-01-27 18:40:26] INFO: Uvicorn running on http://0.0.0.0:7892 (Press CTRL+C to quit)

    现在的状况是:

    宿主机 windows 使用 localhost:7892 可以正常访问, 但是宿主机和局域网内其他设备使用 192.168.31.132:7892 无法访问到 AutoBangumi

    已经进行过的尝试:

    将 -p 7892:7892 改为 -p 192.168.31.132:7892:7892, 依然无法访问, 同时 localhost:7892 也挂了.

    猜测是防火墙问题, 关闭了宿主机 windows 的防火墙, wsl 默认好像就没有装 iptables 和 firewalld, 也不行.

    第 1 条附言  ·  298 天前

    刚才在尝试的时候意外地发现, 在局域网其他机器是能访问的, 只是宿主机不能访问它自己. 之前都是在宿主机内尝试访问, 所以一直连不上

    使用 python3 -m http.server 8000 启动一个小伺服器

    启动位置 \ 从哪里访问 宿主 wsl 宿主 win 局域网
    宿主机 wsl 启动 192.168.31.132:✗
    localhost:〇
    127.0.0.1:✗
    192.168.31.132:✗
    localhost:✗
    127.0.0.1:〇
    192.168.31.132:〇
    宿主机 win 启动 192.168.31.132:✗
    localhost:〇
    127.0.0.1:✗
    192.168.31.132:〇
    localhost:〇
    127.0.0.1:〇
    192.168.31.132:〇

    有没有大佬能解释下为什么会这个样子

    11 条回复    2024-01-29 00:03:05 +08:00
    yijiangchengming
        1
    yijiangchengming  
       298 天前
    那是因为 WSL 内端口只转发到了 Windows 内的 127.0.0.1 ,没有监听局域网地址。需要在 Windows 内设置端口转发。
    使用 PortProxyGUI 这个软件手段设置转发。
    renmu
        2
    renmu  
       298 天前 via Android
    你本地起个 http 服务,关闭所有防火墙,看看其他设备能否访问,排除一下防火墙的问题
    echo1937
        3
    echo1937  
       298 天前
    说一下我的环境:
    docker desktop wsl2 backend ,安装 Ubuntu 20.04 ,
    进入 desktop 的 resource -- wsl integration 中,
    选择 Enable integration with my default WSL distro ,并选中这个 Ubuntu 20.04

    然后无论在 wsl 中还是 Windows 中,都可以使用 docker 命令启动容器,
    并且无论是 localhost 还是局域网 ip ,都能直接访问到暴露的端口和服务。
    paulluis2dev
        4
    paulluis2dev  
       298 天前 via iPhone
    😄,我也有这个问题,设置 mirrored 网络后,局域网其他机器想访问自己的 FTPs990 端口,直接报拒绝连接
    PrinceofInj
        5
    PrinceofInj  
       298 天前
    用的最新的 wsl ,直接使用没问题,刚开始的时候怎么都访问不了,后来突然想起来 windows 防火墙没开,把 windows 防火墙端口放行之后一切正常。启用了 wsl 的最新使用功能。
    paulluis2dev
        6
    paulluis2dev  
       298 天前 via iPhone
    @PrinceofInj 是设置的 mirrored 网络模式吗
    Yuhyeong
        7
    Yuhyeong  
       298 天前
    docker 内 0.0.0.0 ,在宿主机实际只是 127.0.0.1 吧可能。做一个端口转发吧
    miotando
        8
    miotando  
    OP
       298 天前
    @renmu 关闭了防火墙, 本地起了服务, 发现了比较意外的事情: 局域网其他设备是能访问的, 但是宿主机不能访问自己, 之前一直在宿主机内尝试访问, 以为连不上
    hzymyp
        9
    hzymyp  
       298 天前 via iPhone   ❤️ 1
    hostAddressLoopback=true
    d4fg4
        10
    d4fg4  
       298 天前 via Android
    开镜像网络
    leconio
        11
    leconio  
       297 天前 via iPhone
    我一般是装 hyper 管理器然后新建网络换桥接。但意义不大,Windows 睡眠 wsl 就挂了,局域网也通不了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3172 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:18 · PVG 20:18 · LAX 04:18 · JFK 07:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.