miotando
V2EX  ›  Windows

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

  •  
  •   miotando · Jan 27, 2024 · 4673 views
    This topic created in 1012 days ago, the information mentioned may be changed or developed.

    宿主机: 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, 也不行.

    Supplement 1  ·  Jan 28, 2024

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

    使用 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 replies  •  2024-01-29 00:03:05 +08:00
    yijiangchengming
    yijiangchengming
    Jan 27, 2024
    1
    那是因为 WSL 内端口只转发到了 Windows 内的 127.0.0.1 ,没有监听局域网地址。需要在 Windows 内设置端口转发。
    使用 PortProxyGUI 这个软件手段设置转发。
    renmu
    renmu
    Jan 27, 2024 via Android
    2
    你本地起个 http 服务,关闭所有防火墙,看看其他设备能否访问,排除一下防火墙的问题
    echo1937
    echo1937
    Jan 27, 2024
    3
    说一下我的环境:
    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 ,都能直接访问到暴露的端口和服务。
    500
    500
    Jan 27, 2024 via iPhone
    4
    😄,我也有这个问题,设置 mirrored 网络后,局域网其他机器想访问自己的 FTPs990 端口,直接报拒绝连接
    PrinceofInj
    PrinceofInj
    Jan 27, 2024
    5
    用的最新的 wsl ,直接使用没问题,刚开始的时候怎么都访问不了,后来突然想起来 windows 防火墙没开,把 windows 防火墙端口放行之后一切正常。启用了 wsl 的最新使用功能。
    500
    500
    Jan 27, 2024 via iPhone
    6
    @PrinceofInj 是设置的 mirrored 网络模式吗
    Yuhyeong
    Yuhyeong
    Jan 27, 2024
    7
    docker 内 0.0.0.0 ,在宿主机实际只是 127.0.0.1 吧可能。做一个端口转发吧
    miotando
    miotando
    OP
    Jan 28, 2024
    8
    @renmu 关闭了防火墙, 本地起了服务, 发现了比较意外的事情: 局域网其他设备是能访问的, 但是宿主机不能访问自己, 之前一直在宿主机内尝试访问, 以为连不上
    hzymyp
    hzymyp
    Jan 28, 2024 via iPhone❤️1
    9
    hostAddressLoopback=true
    d4fg4
    d4fg4
    Jan 28, 2024 via Android
    10
    开镜像网络
    leconio
    leconio
    Jan 29, 2024 via iPhone
    11
    我一般是装 hyper 管理器然后新建网络换桥接。但意义不大,Windows 睡眠 wsl 就挂了,局域网也通不了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1949 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 16:36 · PVG 00:36 · LAX 08:36 · JFK 11:36
    ♥ Do have faith in what you're doing.