Docker on Windows 11 Home 折腾全记录

背景

Windows 11 家庭中文版,想装 Docker Desktop,结果每一步都在踩坑。前后折腾了多次重启、多次修复、最终绕了个大弯才跑起来。

遇到的问题

1. Ubuntu 装不上

wsl --install -d Ubuntu 卡死,等半天没反应。换 winget、Microsoft Store 也都失败。用清华镜像下载手动 tar 包也是 404。

原因: 本地 DNS(192.168.84.21)对 raw.githubusercontent.com 做了黑洞解析,返回 0.0.0.0。wsl --install 要从 GitHub 拉发行版列表和镜像,连接不上。

2. WSL 提示“此计算机上未启用虚拟化”

wsl --status 报:

WSL2 无法启动,因为此计算机上未启用虚拟化。

systeminfo 显示 A hypervisor has been detected,说明 BIOS 虚拟化是开的。

原因: Windows 可选功能 VirtualMachinePlatformMicrosoft-Windows-Subsystem-Linux 没启用,或者启用了但文件没部署成功。

3. DISM 启用功能后重启就“撤销更改”

dism /enable-feature 提示需要重启,重启后 CBS 处理到一半失败,系统自动回滚,回到原样。重复多次都一样。

原因: Windows 11 家庭版的 CBS 仓库注册了 VirtualMachinePlatform 的元数据,但实际的 vmcompute.exe、compute.sys 等驱动文件在家庭版中不存在。每次重启时 CBS 试图安装但找不到文件,只好回滚。

4. Docker Desktop 报“Virtualization support not detected”

Docker Desktop 启动后一直卡在 Starting,报:

engine linux/wsl failed to start: Virtual Machine Platform not enabled
No virtualization available

原因: Docker 的 WSL2 后端需要 Host Compute Service(HCS/vmcompute),这个服务依赖 VirtualMachinePlatform 功能。家庭版没有这个功能,所以 Docker 起不来。

5. 手动部署 vmcompute 失败

尝试从 WinSxS 里提取 vmcompute.exe 手动部署到 System32、创建服务。

结果:vmcompute.exe 启动就报 STATUS_DLL_NOT_FOUND,缺少 compute.sys 内核驱动——这个驱动家庭版的 WinSxS 里根本没有。

6. 重置电脑后问题依旧

选择“重置此电脑 → 保留我的文件”后,VirtualMachinePlatform 还是 0x60(Staged)状态。

最终解决步骤

最终是在 Windows 更新升级到 24H2 预览版之后,按以下顺序搞定的:

# 1. 修复系统映像
DISM /Online /Cleanup-Image /RestoreHealth

# 2. 启用 WSL 和虚拟机平台(管理员 PowerShell)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 3. 开启 Hyper-V 启动
bcdedit /set hypervisorlaunchtype auto

# 4. 重启
# 5. 设置 WSL 默认版本并安装 Ubuntu
wsl --set-default-version 2
wsl --install -d Ubuntu-22.04 --web-download

注意:--web-download 因为 DNS 问题也会失败,所以实际用的是 Microsoft Store 安装的 Ubuntu 24.04 LTS 包,直接启动 ubuntu2404.exe 让它自动注册到 WSL。

验证

wsl -l -v
# 输出: Ubuntu-24.04 Running 2 ✅

docker run hello-world
# 输出: Hello from Docker! ✅

docker info
# Server Version: 29.5.3 ✅
# Kernel Version: 6.18.33.1-microsoft-standard-WSL2 ✅

一些教训

  1. DNS 黑洞比想象中更坑 — 本地网络对 GitHub 的域名做了屏蔽,wsl --install、winget msstore 源都会受影响。解决办法是用 hosts 文件绕过:

    185.199.108.133 raw.githubusercontent.com
    
  2. Windows 11 家庭版缺 VirtualMachinePlatform 的二进制文件 — 这是产品设计层面的限制,不是修能解决的。最终是通过系统大版本更新(升级到 24H2)才让 DISM 能正确部署这些组件。

  3. docker --version 不等于 docker 能用 — 那个只是 CLI 版本号。要看 docker info 有没有 Server 信息才算数。

  4. com.docker.service 没用 — 这个服务一直处于 Stopped 状态,但只要 Docker Desktop GUI 跑起来,后端引擎就能正常工作。

最终状态

  • ✅ Docker Desktop 正常运行
  • ✅ WSL2 + Ubuntu 24.04 LTS
  • ✅ 可以 docker run hello-world
  • ✅ 可以 docker run nginx
  • ⚠️ 本地 DNS 仍屏蔽 GitHub,已用 hosts 文件绕过
  • ⚠️ 系统从 22631 升级到了 26200(24H2 预览版)

更多推荐