ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Win10下Docker Desktop与VMware共存方案:WSL2后端与WHP兼容实践

2026/9/17 1:08:53 拓冰建站 浏览量
Win10下Docker Desktop与VMware共存方案:WSL2后端与WHP兼容实践 说个我踩了两年的坑。Docker Desktop 和 VMware Workstation 在 Win10 上以前就是一对冤家——Docker 要开 Hyper-VVMware 一见到 Hyper-V 就没法启动虚拟机。那时候想在两边兼顾只能用引导切换的办法改一次 bcdedit 重启一次白天用 Docker 联调服务、晚上开 VMware 测虚拟机一整天下来有大半精力都耗在开机等圈圈上。直到我把 Docker Desktop 切到 WSL2 后端再配合新版 VMware 对 Windows Hypervisor Platform 的兼容支持才终于把这台电脑从重启地狱里捞了出来。这篇文章就是把整套思路和操作细节完整记一遍适合在 Win10 上同时需要 Docker 和 VMware、又不想反复切换引导的人参考也适合刚准备入 WSL2 的朋友当一份安装手册。1. 先搞清楚为什么以前必须重启1.1 这对冤家的恩怨情仇Docker Desktop 早期在 Windows 上是个彻头彻尾的Hyper-V 依赖户。它靠 Hyper-V 拉一个独立的 Linux 虚拟机MobyVM来跑容器所以你只要想在 Windows 上正常使用 Docker就必须先把 Hyper-V 打开。VMware Workstation 这边恰好相反——它自带一套和 Hyper-V 同级的虚拟化引擎之前的版本一旦检测到 Windows 的 Hypervisor 已经占用了 CPU 虚拟化层就直接罢工报VMware Workstation 和 Hyper-V 不兼容请禁用 Hyper-V之类的错误。于是那几年大家只能玩引导切换。手动以管理员身份打开 CMD用两条命令来回倒bcdedit /set hypervisorlaunchtype auto 切到 Hyper-V给 Docker 用 bcdedit /set hypervisorlaunchtype off 关掉 Hyper-V给 VMware 用切完还得重启每次开机等半天圈圈。更难受的是实际开发场景里容器加虚拟机经常要同时上容器里起一个 API 服务VMware 里跑一个要对接的客户端程序或者旧系统镜像两边还得互相通信。这时候你只能二选一来回切来切去时间全浪费在等待上。说它是重启烦恼一点不夸张。1.2 新版VMware其实已经变了转折点出现在 2020 年前后。VMware Workstation 从 15.5 版本开始官方支持在启用 Hyper-V 的 Windows 主机上运行虚拟机早期版本算技术预览到了 15.5.2 基本可用16、17 已经非常成熟。原理上VMware 不再坚持自己直接控制 CPU 虚拟化层而是通过 Windows 提供的一组 API 接口跑在 Hypervisor 之上。但问题在于很多网上教程还停留在老黄历一开口就让你关 Hyper-V禁用 Device Guard。我查过不少社区帖不少人明明用的是 VMware 16、17还在照着老方法关来关去。真正需要做的是三件事把系统的虚拟化相关功能打开、让 Docker 走 WSL2 后端、装一个新版 VMware。下面把这套逻辑彻底讲清楚。2. 共存方案的底层原理三个组件各干各的活2.1 Hyper-V、虚拟机平台、WHP到底指什么很多人一听到虚拟化就头大其实在 Windows 上这几个功能名字看着像各自干的活完全不同Windows 功能作用对我们方案的意义Hyper-V 完整角色提供完整的 Hyper-V 管理器、虚拟交换机等功能最全不需要特意开启装了反而多占资源虚拟机平台VirtualMachinePlatformWSL2 运行轻量级虚拟机的基础包含底层 Hypervisor必须开启Windows 虚拟机监控程序平台HypervisorPlatform向 VMware、VirtualBox 等第三方软件开放 Hypervisor API必须开启你可以把 Hypervisor 想象成一栋大楼的地基。WSL2 是其中一个租户它通过虚拟机平台这扇门住进来VMware 是另一个租户它想住进来就得走Windows 虚拟机监控程序平台这道公共通道。三者共用同一个地基谁也不需要把谁赶走。2.2 WSL2是如何偷瞄Windows Hypervisor的WSL2 和第一代 WSL 最大的区别是它不再是翻译系统调用而是运行一个真正的 Linux 内核。这个内核跑在由虚拟机平台创建的轻量级虚拟机上由 Windows 统一调度 CPU、内存和 I/O。Docker Desktop 的 WSL2 后端就是直接复用了这套 Linux 内核来跑容器而不是像老版本那样自己再单独创建一个 MobyVM。这样做的好处非常明显不再为 Docker 单独保留一整个虚拟机内存可以动态收缩磁盘占用也更小启动容器几乎是秒开。同时因为根本不需要完整的 Hyper-V 管理角色Windows 10 家庭版也能用。很多人以为没有 Pro 版就装不了 Docker其实是误解家庭版只要开启虚拟机平台和 WSL 相关功能就行。2.3 为什么这个方案在Win10上也能用微软在 Windows 10 2004build 19041之后把 WSL2 正式带给了普通用户。家庭版虽然没有 Hyper-V 角色但虚拟机平台和Windows 虚拟机监控程序平台这两个功能都在这就够用了。Docker Desktop 在家庭版上必须选 WSL2 后端因为 Hyper-V 后端依赖完整角色在专业版上虽然两个后端都能选但从资源占用和体验来看我还是建议无脑选 WSL2。所以这套共存方案的完整拼图是Win10 2004 以上系统 开启虚拟机平台和WHP WSL2 内核 Docker Desktop 走 WSL2 后端 VMware Workstation 15.5.2 以上版本。缺一个环节都可能回到老路上去。3. 动手前先自查版本、BIOS和Windows功能依赖3.1 最低硬件和系统版本要求先说结论这台机器的硬件不需要多豪华但有几项是硬指标。我做了个速查表项目最低要求建议配置CPU支持 VT-x / AMD-V且已开启4 核以上6 核更稳内存8 GB16 GB磁盘50 GB 剩余空间NVMe SSD系统Win10 64 位 2004build 19041以上最新更新的 Win10虚拟化BIOS 中开启 Virtualization Technology任务管理器能直接看到已启用如果你的系统版本低于 2004建议先把 Windows Update 跑满。不是不能装是 WSL2 在老版本上兼容性问题多没必要给自己添堵。3.2 确认BIOS中的CPU虚拟化开关这块是最隐蔽的坑。你按教程把所有软件都装好了最后发现 WSL2 启动就报此计算机上未启用虚拟化十有八九是 BIOS 里的开关没开。判断方法很简单打开任务管理器切到性能标签点 CPU看右下角虚拟化状态。如果是已启用恭喜跳过这步。如果是已禁用重启进 BIOS开机时按 Del 或 F2品牌机可能是 F10/F12找 Intel Virtualization Technology 或 SVM Mode改成 Enabled保存退出。不同主板菜单名字不一样本质都是把 CPU 的虚拟化扩展打开。3.3 需要开启的Windows功能附PowerShell命令这一步用管理员身份打开 PowerShell 或者 CMD一行一行执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart dism.exe /online /enable-feature /featurename:HypervisorPlatform /all /norestart三条命令分别对应适用于 Linux 的 Windows 子系统虚拟机平台Windows 虚拟机监控程序平台。执行完之后提示重启就重启不要偷懒。到这里可以把控制面板 - 程序和功能 - 启用或关闭 Windows 功能界面打开看一眼确认这三项前面是勾选状态方便后面排查问题。注意网上很多教程会劝你直接勾选整个Hyper-V我并不建议。我们的方案只需要上面三个平台组件把完整 Hyper-V 角色也打开不仅没必要还会让系统多出一堆服务反而给后续排查增加干扰。4. 装WSL2环境搭好了后面才顺4.1 安装WSL2内核与设置默认版本Windows 功能开完之后还不能直接装发行版因为 WSL2 的 Linux 内核是单独分发的。去微软官网下载 WSL2 Linux 内核更新包搜索 wsl_update_x64.msi官方链接一般挂在 aka.ms/wsl2kernel 下下载后双击安装。安装完内核在管理员 CMD 里执行wsl --set-default-version 2这一步是告诉 Windows以后新装的 Linux 发行版默认使用 WSL2 架构。如果你在这里看到WSL 2 需要更新其内核组件之类的提示多半是内核 msi 没装或者装完没生效重新跑一遍安装程序再试。4.2 安装Ubuntu 22.04并验证WSL2 本身只是平台你需要一个真实的 Linux 发行版作为 Docker 的运行环境。最简单的方式是从 Microsoft Store 搜索 Ubuntu 22.04.3 LTS点安装。也可以在 CMD 里执行wsl --install -d Ubuntu-22.04首次启动会让你设置 Linux 用户名和密码这个用户名的权限规则和普通 Linux 一样把它当 sudo 用户用就行。安装完执行wsl -l -v如果看到 Ubuntu-22.04 的 VERSION 列是 2说明 WSL2 架构已经生效。如果显示 1执行wsl --set-version Ubuntu-22.04 2手动转换。顺便把系统更新跑一下后面 Docker 装依赖会快很多sudo apt update sudo apt upgrade -y4.3 给WSL2画一条资源红线.wslconfigWSL2 默认会按比例吃内存默认策略是取总内存的一半或者 8GB 中较小的那个不同版本策略略有差异。如果电脑本身只有 16GB 内存再同时开 VMware 和 Docker很容易卡到鼠标都漂移。我的经验是在用户目录下建一个.wslconfig文件路径一般是C:\Users\你的用户名\.wslconfig写上[wsl2] memory4GB processors4 swap2GB localhostForwardingtrue修改完执行wsl --shutdown让配置生效。这样 WSL2 最多只用 4GB 内存剩下的空间留给 VMware 和 Windows 自己三者之间就不会互相抢资源。5. 装Docker Desktop并把引擎切到WSL2后端5.1 安装时的选项别选错Docker Desktop 的安装包可以直接从官网下载稳定版。安装过程中有一个关键页面会问 Use WSL 2 instead of Hyper-V一定要勾选。现在的安装器一般会自动检测你系统里已经装了 WSL2然后默认就勾上但如果你是从老版本升级上来的容易踩坑。已经装过 Docker Desktop 的也没关系打开 Settings - General把 Use the WSL 2 based engine 勾上然后点 Apply Restart。这一步就是整个共存方案的灵魂Docker 从此不再依赖独立的 MobyVM而是直接跑在 WSL2 的 Linux 内核上资源的开销小了一大截。5.2 打开与Ubuntu的集成Docker Desktop 装好后默认只在它自己创建的docker-desktop发行版里跑引擎但你平时操作更习惯在自己的 Ubuntu 终端里执行 docker 命令。需要手动打开集成Settings - Resources - WSL Integration在列表里把你安装的 Ubuntu-22.04 打开。打开之后回到 Ubuntu 终端执行docker --version如果能看到版本号而不是 command not found说明集成成功。这一步经常会遇到明明已经打开集成但容器里还是找不到 docker一般重启 Docker Desktop 或者wsl --shutdown之后就能解决。5.3 跑通第一个容器验证环境验证整个链路是否通畅最好的方法就是跑一个最小的测试容器。在 Ubuntu 终端里执行docker run hello-world正常情况下Docker 会从镜像仓库拉取 hello-world 镜像然后运行并打印一段说明文字。如果这一步顺利通过说明 WSL2、Docker Desktop、Ubuntu 三者之间的通道已经完全打通。再执行一下docker ps -a能看到刚才那个已经退出的 hello-world 容器环境就确认没白配。顺嘴提一句日常使用中所有 docker 命令我都是在 Ubuntu 终端里敲基本不碰 PowerShell 里的 docker.exe。前者走的是 Linux 原生环境文件系统、路径风格都正常后者在 Windows 和 Linux 的边界上容易产生路径类型、换行符之类的诡异问题新手尤其容易在这些小事上栽跟头。6. 装VMware Workstation并让它和Docker同时跑6.1 版本选择15.5.2只是起点17.x才是常态到了最关键的一步。VMware Workstation 的版本必须满足条件最低 15.5.2推荐 16.x 或 17.x。15.5.2 是能和 Hyper-V 共存的首个稳定版本但性能和稳定性都一般我实测下来有几个旧镜像在 15.5 上经常出现鼠标卡顿升到 17 之后就再没见过类似问题。这里额外说一句VMware 被收购之后官方已经把 Workstation Pro 改为个人使用免费的政策。你只需要到官网注册一个账号就能拿到个人使用的许可证完全不需要去网上找什么乱七八糟的序列号。免费、干净、更新及时怎么选已经很清楚了。6.2 让VMware走WHP模式的关键点安装 VMware 的过程本身没什么特殊操作一路 Next 就行。真正需要注意的是启动第一台虚拟机时系统会不会报错。如果你之前为了老版本 VMware 做过关闭 Hyper-V的引导操作现在必须把它改回来。在管理员 CMD 里执行bcdedit /set hypervisorlaunchtype auto然后重启。因为 WSL2 和 WHP 都需要 Hypervisor 正常启动这个开关必须保持 auto。启动虚拟机后如果一切正常VMware 会静默地通过 WHP 接口运行你甚至感觉不到它和 Docker 在共享同一个虚拟化底座。但要注意WHP 模式下 VMware 有部分功能是受限的比如对 32 位老旧客户机系统、某些需要硬件直通的特殊设备的支持不如原生态模式。绝大多数人日常跑 64 位的 Windows、Linux 虚拟机完全没问题但如果你专门做内核调试、硬件模拟这类偏门实验就得权衡一下了。6.3 同时运行的资源分配经验Docker 和 VMware 都装好之后最关键的就是资源分配。我自己的方案是16GB 内存的笔记本WSL2 限 4GBVMware 里给主要的虚拟机分配 4GBWindows 系统和各种开发工具留 8GB。这样三边都有余量平时开着 Docker Desktop 和一台 VMware 虚拟机再挂两三个 IDE基本不卡。另一个建议是文件位置。Docker 相关的数据和项目尽量放在 WSL2 的 Linux 文件系统里也就是 Ubuntu 家目录/home/用户名/不要放/mnt/c/下。WSL2 访问 Windows 盘符挂载目录时走的是跨文件系统协议性能损失很大项目代码放 Linux 侧容器挂载和构建速度都能感到明显提升。VMware 的虚拟机磁盘文件则放 SSD 上内存足够大的话可以把虚拟机内存调大一点减少磁盘换入换出。7. 常见问题与排查技巧实录附速查表7.1 Docker Desktop把锅甩给虚拟化的几种表现最常见的是启动时弹窗 Docker Desktop failed to start because virtualisation support wasnt detected。这个提示很坑因为它其实掩盖了三种不同的原因现象主要原因解决方案提示未检测到虚拟化支持BIOS 中 VT-x/SVM 未开启进 BIOS 开启虚拟化提示需要开启虚拟机平台Windows 功能没启用重跑 dism 命令启用 VirtualMachinePlatform提示需要 WSL2 内核更新wsl_update_x64.msi 没装或失效重新安装内核更新包我每次重装系统后都是按这个顺序排查基本一两分钟就能定位。还有一个隐藏点如果你装过某些系统优化工具把 Hyper-V 相关的服务禁用了也会出现这个弹窗检查一下服务管理器里VMmsHyper-V 虚拟机管理服务有没有被设为禁用。7.2 WSL2无法启动的经典报错报错信息一般是WSL2 无法启动因为此计算机上未启用虚拟化。请确保计算机固件设置中虚拟机平台已启用并且虚拟化已在 BIOS 中启用。看到这行字先别急着重装按优先级检查三件事。第一任务管理器确认虚拟化状态是不是已启用第二Windows 功能里确认虚拟机平台是勾选状态第三执行bcdedit /enum | findstr hypervisorlaunchtype确认结果是Auto如果显示Off执行bcdedit /set hypervisorlaunchtype auto重启。这三个地方都正常之后WSL2 基本不会再有启动类问题。另一个常见错误是WslRegisterDistribution failed with error: 0x80370102根因同样是虚拟化层没起来按上面三步排查即可。7.3 VMware与Device/Credential Guard的兼容地雷开始就用共存方案的人不多所以很多人不知道这里还藏着一个地雷Windows 的基于虚拟化的安全VBS和内核隔离没关的情况下VMware 可能启动虚拟机时直接报VMware Workstation 与 Device/Credential Guard 不兼容。解决步骤是这样的打开 Windows 安全中心 - 设备安全性 - 内核隔离把内存完整性开关关掉重启。如果重启后问题还在再检查msinfo32里的基于虚拟化的安全是否还在运行是的话就需要通过本地组策略把 Device Guard 关掉gpedit.msc计算机配置 - 管理模板 - 系统 - Device Guard - 打开基于虚拟化的安全设为已禁用。注意这里关闭的是内存完整性这一项虚拟化安全功能不是让你关闭 Windows Defender 的实时防护和防火墙。杀毒软件和系统更新该开还是开只是这个功能与 VMware 的虚拟化模块存在兼容冲突平时没有特殊安全需求的话关掉不影响日常使用。7.4 我的日常资源分配和顺序习惯文章最后分享几个我自己长期使用下来的习惯。第一个开机之后先启动 Docker Desktop等右下角图标变稳定后再开 VMware 虚拟机顺序反过来的话偶尔会遇到 VMware 抢内存导致 Docker 引擎初始化失败。第二个把频繁用的容器编排写成 docker-compose.yml需要时一条docker compose up -d拉起来用完down清理尽量避免让容器长期占着资源。第三个每隔一段时间执行一次wsl --shutdown把 WSL2 的缓存清一清特别是 Windows 大版本更新之后很多莫名其妙的网络和性能问题都会在这条命令后消失。最后再给个实在的建议装这套环境的时候不要图快一口气把所有组件都装上。按Windows 功能 - WSL2 内核 - Ubuntu - Docker Desktop - VMware的顺序每装完一个就验证一个出现问题能立刻定位到具体环节。这套流程我前前后后帮周围同事处理过不下十次按这个顺序走两个小时以内基本都能跑通之后就再也不用在 Windows 里为了二选一烦恼了。