V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
gibber
V2EX  ›  程序员

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

  •  
  •   gibber · 2025 年 4 月 26 日 · 3472 次点击
    这是一个创建于 263 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    35 条回复    2025-05-30 00:37:05 +08:00
    cpstar
        1
    cpstar  
       2025 年 4 月 26 日
    一方面 wsl2 的 IP 是变动的,另一方面不要皮裤套棉裤。直接安装 docker for windows ,然后使用 wsl 引擎,最后在 windows cmd/PS 中启动 docker ,并且配置好端口设置。
    jacksir
        2
    jacksir  
       2025 年 4 月 26 日
    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
        3
    nickxudotme  
       2025 年 4 月 26 日 via iPhone
    wsl 的网络设置成 mirror 行不行
    s1461a
        4
    s1461a  
       2025 年 4 月 26 日
    网络配置麻烦,建议使用默认模式,然后用 tailscale 连接就好了。(以前用 wsl2 总是被网络配置劝退)
    s1461a
        5
    s1461a  
       2025 年 4 月 26 日
    也可能是我网络基础太差
    gudecatch
        6
    gudecatch  
       2025 年 4 月 26 日
    ```
    [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
        7
    yrEv15Ywr4BN0pz5  
       2025 年 4 月 26 日
    试试升级到 win11
    skybig
        8
    skybig  
       2025 年 4 月 26 日 via Android   ❤️ 1
    直接 mirror 不行吗?我就是 mirror ,然后局域网内其他设备访问容器,填写电脑 ip+暴露出的端口号就能访问了。
    gibber
        9
    gibber  
    OP
       2025 年 4 月 26 日
    @cpstar
    @jacksir
    看来最优解只有直接装 docker desktop 了
    gibber
        10
    gibber  
    OP
       2025 年 4 月 26 日
    @NX2023
    @skybig
    mirror 的配置只有 win11 22H2 以上版本支持
    EchoWhale
        11
    EchoWhale  
       2025 年 4 月 26 日 via iPhone
    hyperv 装一个 linux ,可以避免绝大部分 wsl 的问题。
    而且 hyperv 虚拟机运行起来也很无感,开机自动启动关机自动保存状态。
    网络设置也没局限,nat 或者桥接随便你搞
    gibber
        12
    gibber  
    OP
       2025 年 4 月 26 日
    @EchoWhale hyperv 的体验应该不如 vmware 吧,我可能要选择 docker desktop 或是 vmware+ubuntu+docker 了
    ThisDay
        13
    ThisDay  
       2025 年 4 月 26 日
    无脑 mirrored 就是唯一解,或者你可以试试桥连,但保不准哪个版本就不支持了。
    jenson47
        14
    jenson47  
       2025 年 4 月 26 日
    vmware 现在个人免费,直接用 vmware 吧,wls2 看起来不错,实际上你用 window 相关的东西去用它,它就有 window 的权限毛病,还有就是开机自动启动应用很难设置
    EchoWhale
        15
    EchoWhale  
       2025 年 4 月 26 日 via iPhone
    @gibber 在使用 windows 作为宿主的前提下,我觉得还是 hyperv 好用。

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

    首先,vmware 默认情况下,开启虚拟机的会打开一个窗口没法关,除非你用命令行启动虚拟机。对无头模式的支持还没有 virtualbox 好用,比 hyperv 也差远了。
    其次,hyperv 是 type 1 虚拟化,性能天然就比 vmware/virtualbox 这种 type 2 的好
    最后,hyperv 安装很方便,启用一下就好了。而 vmware 免费后,下载链接你就找吧,不在博通的网站里逛个一两小时你都找不到下载链接
    linlord
        16
    linlord  
       2025 年 4 月 26 日
    @EchoWhale #15 我找到过,确实藏得够深的,而且又是注册又是干啥的
    X9T4P1
        17
    X9T4P1  
       2025 年 4 月 26 日
    建议使用 WSL1
    WSL1 是共享宿主机的网络栈,即 WSL1 共享主机 IP ,并没有自己独立的逻辑网卡,也即没有自己独享的 IP 地址。
    wsl2 则是宿主机完整虚拟出来的一个完整的 Linux 虚拟机,拥有自己逻辑上独立的网卡,也即拥有属于自己的独立网络栈。网络配置起来比较费劲。
    dxcqcv
        18
    dxcqcv  
       2025 年 4 月 27 日
    问一下我在 windows11 里用 V2ray 科学上网代理到 privoxy ,如何使 WSL2 也能使用宿主的 privoxy 代理网络
    userdhf
        19
    userdhf  
       2025 年 4 月 27 日
    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
        20
    iv8d  
       2025 年 4 月 27 日
    如果时自定义桥接网的话,需要先知道 wsl 主机的 ip ,hostname 看看。
    iv8d
        21
    iv8d  
       2025 年 4 月 27 日
    另一个方案就是直接暴露出端口,network-mode: 'host',这样服务间就是透明的了
    xiaochenzhu
        22
    xiaochenzhu  
       2025 年 4 月 27 日
    直接镜像呢
    ```
    PS C:\Users\conyc> cat C:\Users\conyc\.wslconfig
    [wsl2]
    processors=2
    memory=8GB
    swap=8GB
    networkingMode=mirrored
    ```
    MHPSY
        23
    MHPSY  
       2025 年 4 月 27 日
    镜像网络就好

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

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