• 请不要在回答技术问题时复制粘贴 AI 生成的内容
gibber
V2EX  ›  程序员

请教一个 wsl2 的网络配置问题

  •  
  •   gibber · Apr 26, 2025 · 4985 views
    This topic created in 558 days ago, the information mentioned may be changed or developed.

    我是 win10 的系统 在 wls2 中安装了 ubuntu 然后又在 ubuntu 中安装了 docker 这时候要如何配置才能让 docker 中运行的容器访问 win10 运行的服务以及所在局域网上的服务呢? 有没有高人可以指点下

    35 replies  •  2025-05-30 00:37:05 +08:00
    cpstar
    cpstar
    Apr 26, 2025
    1
    一方面 wsl2 的 IP 是变动的,另一方面不要皮裤套棉裤。直接安装 docker for windows ,然后使用 wsl 引擎,最后在 windows cmd/PS 中启动 docker ,并且配置好端口设置。
    jacksir
    jacksir
    Apr 26, 2025
    2
    1.完全写在 wsl2 中的 docker
    2.在 windows 中安装 docker desktop
    3.docker desktop 中设置--resources--wsl integration (选择 wsl 环境)
    4.docker desktop 中设置--docker engine (配置镜像:google 搜 docker 镜像有一个 github 仓库)
    5.windows 主环境的.wslconfig 中设置:
    [experimental]
    networkingMode=mirrored
    nickxudotme
    nickxudotme
    Apr 26, 2025 via iPhone
    3
    wsl 的网络设置成 mirror 行不行
    s1461a
    s1461a
    Apr 26, 2025
    4
    网络配置麻烦,建议使用默认模式,然后用 tailscale 连接就好了。(以前用 wsl2 总是被网络配置劝退)
    s1461a
    s1461a
    Apr 26, 2025
    5
    也可能是我网络基础太差
    gudecatch
    gudecatch
    Apr 26, 2025
    6
    ```
    [wsl2]
    autoProxy=true
    networkingMode=NAT
    ```

    我这样的配置 在 wsl2 装的 docker engine 里面跑一个 docker ,可以通过我 host 的局域网 ip 访问

    比方说我的电脑在局域网是 192.168.124.88, 我可以
    ```
    docker run -it quay.io/curl/curl:latest 192.168.124.88:80
    docker run -it quay.io/curl/curl:latest 192.168.124.112:8081

    ```
    yrEv15Ywr4BN0pz5
    yrEv15Ywr4BN0pz5
    Apr 26, 2025
    7
    试试升级到 win11
    skybig
    skybig
    Apr 26, 2025 via Android❤️1
    8
    直接 mirror 不行吗?我就是 mirror ,然后局域网内其他设备访问容器,填写电脑 ip+暴露出的端口号就能访问了。
    gibber
    gibber
    OP
    Apr 26, 2025
    9
    @cpstar
    @jacksir
    看来最优解只有直接装 docker desktop 了
    gibber
    gibber
    OP
    Apr 26, 2025
    10
    @NX2023
    @skybig
    mirror 的配置只有 win11 22H2 以上版本支持
    EchoWhale
    EchoWhale
    Apr 26, 2025 via iPhone
    11
    hyperv 装一个 linux ,可以避免绝大部分 wsl 的问题。
    而且 hyperv 虚拟机运行起来也很无感,开机自动启动关机自动保存状态。
    网络设置也没局限,nat 或者桥接随便你搞
    gibber
    gibber
    OP
    Apr 26, 2025
    12
    @EchoWhale hyperv 的体验应该不如 vmware 吧,我可能要选择 docker desktop 或是 vmware+ubuntu+docker 了
    ThisDay
    ThisDay
    Apr 26, 2025
    13
    无脑 mirrored 就是唯一解,或者你可以试试桥连,但保不准哪个版本就不支持了。
    jenson47
    jenson47
    Apr 26, 2025
    14
    vmware 现在个人免费,直接用 vmware 吧,wls2 看起来不错,实际上你用 window 相关的东西去用它,它就有 window 的权限毛病,还有就是开机自动启动应用很难设置
    EchoWhale
    EchoWhale
    Apr 26, 2025 via iPhone
    15
    @gibber 在使用 windows 作为宿主的前提下,我觉得还是 hyperv 好用。

    既然你用 wsl ,说明你的 linux 更多的作为一种服务来用。

    首先,vmware 默认情况下,开启虚拟机的会打开一个窗口没法关,除非你用命令行启动虚拟机。对无头模式的支持还没有 virtualbox 好用,比 hyperv 也差远了。
    其次,hyperv 是 type 1 虚拟化,性能天然就比 vmware/virtualbox 这种 type 2 的好
    最后,hyperv 安装很方便,启用一下就好了。而 vmware 免费后,下载链接你就找吧,不在博通的网站里逛个一两小时你都找不到下载链接
    linlord
    linlord
    Apr 26, 2025
    16
    @EchoWhale #15 我找到过,确实藏得够深的,而且又是注册又是干啥的
    X9T4P1
    X9T4P1
    Apr 26, 2025
    17
    建议使用 WSL1
    WSL1 是共享宿主机的网络栈,即 WSL1 共享主机 IP ,并没有自己独立的逻辑网卡,也即没有自己独享的 IP 地址。
    wsl2 则是宿主机完整虚拟出来的一个完整的 Linux 虚拟机,拥有自己逻辑上独立的网卡,也即拥有属于自己的独立网络栈。网络配置起来比较费劲。
    dxcqcv
    dxcqcv
    Apr 27, 2025
    18
    问一下我在 windows11 里用 V2ray 科学上网代理到 privoxy ,如何使 WSL2 也能使用宿主的 privoxy 代理网络
    userdhf
    userdhf
    Apr 27, 2025
    19
    wsl 里的 linux 并不是完全版的 linux ,不知道你的 docker 是咋装上的,能不能正常用;
    docker 官方倒是有个 docker in docker ,如果你非要在 wsl 装 docker 的话可以看看;
    如果只是需求在 wsl 里使用 docker ,那么 docker desktop ,以及其他各类 docker desktop 工具都可以提供类似“嵌套虚拟化”的支持,即 win10 宿主机上安装 docker ,在设置里可以打开对 wsl 中不同发行版的支持,在 wsl 里就可以直接使用 docker 了;
    你说的 docker 内网与宿主机内网互相打通的情况,我认为应该首先将你的 docker 需求搞清楚,宿主机的 docker“嵌套虚拟化”是否能满足,还是非要 dind ,如果只是 docker 需求,那么检查你的 docker 默认网络的网段,如果默认网络与宿主机网段一样,就会无法互访,需要手动改网段,我现在就是在 wsl 中的 ubuntu 中用 docker + nodejs 开发 vue 全家桶,宿主机网段的其他电脑都可以看到调试页面;
    iv8d
    iv8d
    Apr 27, 2025
    20
    如果时自定义桥接网的话,需要先知道 wsl 主机的 ip ,hostname 看看。
    iv8d
    iv8d
    Apr 27, 2025
    21
    另一个方案就是直接暴露出端口,network-mode: 'host',这样服务间就是透明的了
    xiaochenzhu
    xiaochenzhu
    Apr 27, 2025
    22
    直接镜像呢
    ```
    PS C:\Users\conyc> cat C:\Users\conyc\.wslconfig
    [wsl2]
    processors=2
    memory=8GB
    swap=8GB
    networkingMode=mirrored
    ```
    MHPSY
    MHPSY
    Apr 27, 2025
    23
    镜像网络就好

    docker 要宿主机和 wsl 共用一个,配置一下 docker desktop 就好了
    johnrosen1
    johnrosen1
    Apr 28, 2025
    24
    @gibber vmware 的 share folder 的 IO 性能太烂了,建议你去自己试试,真用不了一点。
    mt3925
    mt3925
    Apr 28, 2025
    25
    我就是这么用的
    mt3925
    mt3925
    Apr 28, 2025
    26
    @mt3925 ,你可以看下 etc hosts ,直接用 my.win 就能访问到 windows ,或者 ip route | grep default | awk '{print $3}' 也可以获取到 windows 的 ip
    mt3925
    mt3925
    Apr 28, 2025
    27
    @mt3925 说反了,my.win 原来是我自己写进去的,下面这段写到.zshrc 或者.bashrc
    host_ip=$(ip route | grep default | awk '{print $3}')
    sed -e "/my.win/d" 斜杠 etc 斜杠 hosts > 斜杠 tmp 斜杠 hosts
    cat /tmp/hosts > 斜杠 etc 斜杠 hosts
    echo "$host_ip my.win" >>斜杠 etc 斜杠 hosts
    gibber
    gibber
    OP
    May 2, 2025
    28
    @mt3925 你这是让 ubuntu 可以通过 my.win 访问宿主机吧,ubuntu 里面运行的 docker 容器要怎么通过 my.win 访问呢
    mt3925
    mt3925
    May 9, 2025
    29
    @gibber 启动容器的时候加上参数--add-host=my.win:x.x.x.x 就行,或者直接 ip 访问
    gibber
    gibber
    OP
    May 9, 2025
    30
    @mt3925 是的,我现在用的也是这个方式,把宿主机 ip 设置到环境变量里了,方便 compose 里面使用,稍微麻烦点倒也能接受,谢谢
    daisyfloor
    daisyfloor
    May 28, 2025
    31
    @xiaochenzhu @leeyuzhe @skybig @jiangliuli 各位大佬

    我是 win11 wsl2 配置了 networkingMode=mirrored 然后安装了 docker desktop 桌面版,我想问问这种情况下,docker desktop 的 settings 里的 resources - network 里面的 enable host networking 还有什么用? 我看是默认是没有勾选的,已经镜像了 wsl2 的网络配置,这里勾选不勾选还会有什么不同么?求解惑。
    ThisDay
    ThisDay
    May 29, 2025
    32
    @daisyfloor 我没勾,不知道 mirrored 后勾了有什么实质性作用,反正现在不勾端口也都是通的
    gudecatch
    gudecatch
    May 29, 2025
    33
    @daisyfloor 不清楚,我直接在 wsl2 里装 docker ,没有另外装 docker desktop. 目前体感而言,在 wsl2 直接装 docker 非常好
    daisyfloor
    daisyfloor
    May 29, 2025
    34
    @jiangliuli 我放弃了。我 pc 代理用的 tun 模式,和 wsl 的网络方面有一些冲突。
    daisyfloor
    daisyfloor
    May 30, 2025
    35
    @jiangliuli 我现在配置了代理,系统代理,不是 tun ,我现在 wsl2 可以自动获取到系统代理 127.0.0.1:7890 但是 docker 引擎似乎不行,pull 不下来镜像,请问这是还要做什么额外设置么?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4979 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 07:46 · PVG 15:46 · LAX 23:46 · JFK 02:46
    ♥ Do have faith in what you're doing.