确认 Docker Desktop 使用 WSL2 后端需三重验证:一、docker info 中 Server Version 含“(wsl2)”且 Default Runtime 为 runc;二、wsl --list --verbose 显示 docker-desktop 或 docker-desktop-data 发行版状态为 Running 且 VERSION=2;三、进入 WSL 执行 ps aux | grep dockerd 能查到 /usr/bin/dockerd 进程。

怎么确认 Docker Desktop 正在用 WSL2 后端运行
直接看 docker info 输出里有没有 Server Version: 26.x 和 Platform: linux 不够,关键得验证引擎是否真跑在 WSL2 内核上。最可靠的方式是交叉比对三处输出:Docker 自身报告、WSL 实例状态、以及进程归属。
- 在 PowerShell 或 CMD 中运行
docker info,重点找这两行:
–Server Version:后面带wsl2字样(如26.1.3 (wsl2))
–Default Runtime:是runc(不是io.containerd.runtime.v1.linux这类 Hyper-V 风格路径) - 同时打开另一个终端,运行
wsl --list --verbose,确认至少有一个发行版状态为Running且VERSION是2;特别注意是否存在名为docker-desktop或docker-desktop-data的专用发行版——这是 Docker Desktop 自动创建的 WSL2 后端容器运行环境,有它基本就坐实了 - 如果仍有疑虑,进 WSL 终端(比如 Ubuntu),执行
ps aux | grep dockerd。若看到类似/usr/bin/dockerd --config-file /etc/docker/daemon.json ...的进程,说明守护进程确实在 WSL2 里跑着;如果是空或报错“command not found”,那大概率还卡在 Hyper-V 模式
为什么 docker --version 不能判断后端类型
docker --version 只显示 CLI 客户端版本,和后端完全无关。你装的是 Docker Desktop v26,CLI 就是 v26,哪怕后端还在用十年前的 Hyper-V,这个命令照样返回 Docker version 26.1.3。很多人就是被这个误导,以为装完新版就自动切 WSL2 了。
- 真正决定后端的是安装时勾选的选项、设置里的开关,以及系统是否具备 WSL2 运行条件
- 即便你手动勾选了 “Use the WSL 2 based engine”,如果
wsl --set-default-version 2没生效,或者没启用VirtualMachinePlatform功能,Docker Desktop 启动时会静默 fallback 回 Hyper-V,并不报错 - 所以别信版本号,信
wsl --list --verbose和docker info里带wsl2标识的那行
任务栏图标右键菜单里没有 “WSL2” 提示怎么办
Docker Desktop 任务栏图标右键菜单只显示 “Settings”“Troubleshoot”“Quit”,从不写 “Running on WSL2”。这个设计本身就是个坑——UI 层面完全不暴露后端信息,用户只能靠命令行验证。
- 如果你在 Settings → General 里勾了 “Use the WSL 2 based engine”,但
wsl --list --verbose里没看到docker-desktop发行版,说明设置没真正落地,常见原因是没点 “Apply & Restart” 或重启 WSL 失败 - 此时执行
wsl --shutdown,再等几秒,重新打开 Docker Desktop,它会尝试重建 WSL2 后端;如果还是没生成,就得检查Windows 功能是否全开、内核更新包是否装好 - 注意:
docker-desktop-data发行版有时不会立刻出现在wsl --list里,但它一定存在;你可以用wsl -d docker-desktop-data强制进入,看看能不能读/var/lib/docker
容易被忽略的验证死角:网络与文件系统行为
后端类型会直接影响容器内外的行为表现,这些现象比命令行输出更真实:
- 在 WSL2 后端下,
docker run -it ubuntu:22.04 ls /mnt/c能列出 Windows C 盘文件(路径映射由 WSL2 自动完成);Hyper-V 下则看不到,除非你手动配置共享文件夹 - 容器内执行
curl ifconfig.me,如果返回的是和宿主机一致的公网 IP,说明网络走的是 WSL2 的 NAT 模式;Hyper-V 下通常会是另一段私有网段地址 - 在 WSL 终端里修改一个挂载进容器的文件(比如
-v $(pwd):/app),容器内inotifywait能立刻捕获事件;Hyper-V 下常有秒级延迟甚至不触发——这是文件系统驱动差异导致的,也是最隐蔽的后端线索
真正卡住人的往往不是“怎么切”,而是“以为切了其实没切”。每次改完设置,必须关掉 Docker Desktop、执行 wsl --shutdown、再重开,否则旧状态可能一直缓存着。


















