Win10下Docker Desktop与VMware共存方案:WSL2后端与WHP兼容实践
2026/9/17 1:08:31 网站建设 项目流程

说个我踩了两年的坑。Docker Desktop 和 VMware Workstation 在 Win10 上以前就是一对冤家——Docker 要开 Hyper-V,VMware 一见到 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 管理器、虚拟交换机等,功能最全不需要特意开启,装了反而多占资源
虚拟机平台(VirtualMachinePlatform)WSL2 运行轻量级虚拟机的基础,包含底层 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 2004(build 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 位 2004(build 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 -y

4.3 给WSL2画一条资源红线(.wslconfig)

WSL2 默认会按比例吃内存,默认策略是取总内存的一半或者 8GB 中较小的那个(不同版本策略略有差异)。如果电脑本身只有 16GB 内存,再同时开 VMware 和 Docker,很容易卡到鼠标都漂移。我的经验是在用户目录下建一个.wslconfig文件(路径一般是C:\Users\你的用户名\.wslconfig),写上:

[wsl2] memory=4GB processors=4 swap=2GB localhostForwarding=true

修改完执行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 限 4GB,VMware 里给主要的虚拟机分配 4GB,Windows 系统和各种开发工具留 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 wasn't detected"。这个提示很坑,因为它其实掩盖了三种不同的原因:

现象主要原因解决方案
提示未检测到虚拟化支持BIOS 中 VT-x/SVM 未开启进 BIOS 开启虚拟化
提示需要开启虚拟机平台Windows 功能没启用重跑 dism 命令启用 VirtualMachinePlatform
提示需要 WSL2 内核更新wsl_update_x64.msi 没装或失效重新安装内核更新包

我每次重装系统后都是按这个顺序排查,基本一两分钟就能定位。还有一个隐藏点:如果你装过某些"系统优化工具"把 Hyper-V 相关的服务禁用了,也会出现这个弹窗,检查一下服务管理器里VMms(Hyper-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 里为了"二选一"烦恼了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询