结论:docker desktop显示“docker engine stopped”90%是未连上wsl2后端,核心在于docker-desktop和docker-desktop-data两个发行版状态非running;需先用wsl --list --verbose确认状态,再针对性执行wsl -t、wsl --shutdown、sc start wslservice等操作,并最终验证wsl -d docker-desktop中dockerd进程与/run/docker.sock可达性。

直接说结论:Docker Desktop 显示 “Docker Engine stopped” 或重启后仍不可用,90% 不是引擎本身坏了,而是它根本没连上 WSL2 后端——wsl --shutdown 只是表面清理,docker info 报错 Cannot connect to the Docker daemon 说明底层发行版压根没起来。
wsl --list --verbose 显示 STATUS 为 STOPPED 或 START_PENDING
这是最常见也最容易被忽略的卡点。Docker Desktop 依赖两个专用 WSL 发行版:docker-desktop 和 docker-desktop-data,它们的状态不为 Running,引擎就永远起不来。
- 先执行
wsl --list --verbose,确认这两个发行版是否存在、状态是否是Running - 如果状态是
STOPPED,直接运行wsl -t docker-desktop和wsl -t docker-desktop-data强制终止(哪怕显示已停),再执行wsl --shutdown - 如果状态是
START_PENDING,大概率是 WSL 服务(WslService)卡死或被杀毒软件拦截,运行sc query WslService看STATE是否为RUNNING;若不是,手动启动:sc start WslService - 注意:
wsl --update有时会失败但不报错,建议加--verbose参数观察输出,失败时重试或手动下载最新内核更新包(wsl_update_x64.msi)安装
docker info 报错 “Cannot connect to the Docker daemon” 且 wsl -d docker-desktop 进不去
说明 docker-desktop 发行版本身无法启动,常见于磁盘损坏、配置冲突或权限异常。
- 先尝试手动进入:
wsl -d docker-desktop—— 如果卡住、报Access is denied或直接退出,不要继续等,立刻关掉所有 WSL 实例:wsl --shutdown - 删除 WSL 数据目录下的锁文件:
%LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx不能删,但可以删同目录下的.lock和docker-desktop.lock(如有) - 如果仍进不去,说明
docker-desktop的虚拟硬盘可能元数据损坏。此时不要重装 Docker Desktop,而是导出并重建发行版:wsl --export docker-desktop C:\tmp\dd.tar→wsl --unregister docker-desktop→wsl --import docker-desktop %LOCALAPPDATA%\Docker\wsl\distro C:\tmp\dd.tar --version 2 - 注意:
wsl --import后需手动设置默认用户(否则无权限运行 dockerd),执行:echo -e "[user]\ndefault=username" | wsl -d docker-desktop tee /etc/wsl.conf(username 替换为你 Windows 登录名)
重置 factory defaults 后 Docker Engine 仍卡在 starting
重置只清配置,不清 WSL 发行版状态和底层服务。很多用户点了 Reset 就以为万事大吉,结果引擎还在等一个永远不响应的 WslService。
- 重置前务必确认:
Get-Service LxssManager和Get-Service WslService都是Running状态(新版系统用后者) - 重置后不要立刻开 Docker Desktop,先在 PowerShell 中执行:
wsl -d docker-desktop-data ls /var/lib/docker,看能否列出镜像目录——能列说明数据层正常,不能列说明docker-desktop-data挂载失败 - 如果
docker-desktop-data挂载失败,检查%LOCALAPPDATA%\Docker\wsl\data\目录是否有写入权限(右键属性 → 安全 → 编辑 → 当前用户勾选“完全控制”) - 某些企业环境组策略会禁用 WSL 自动挂载,需手动在
%USERPROFILE%\wsl.conf中添加:[automount] enabled = true
Windows 功能已开、虚拟化已启用,但 docker info 仍提示 “Cannot detect Docker daemon”
这往往指向更底层的通信断点:Docker Desktop 的 Windows 服务 com.docker.service 没真正跑起来,或者它和 WSL 的 Unix socket 路径不通。
- 检查服务状态:
Get-Service com.docker.service,若为Stopped或StartPending,手动启动:Start-Service com.docker.service - 查看服务日志:
Get-EventLog -LogName Application -Source "Docker Desktop" -Newest 20,重点找Failed to connect to WSL或Failed to bind to /run/docker.sock - WSL 内部 socket 路径必须是
/run/docker.sock,但部分自定义.wslconfig会覆盖automount行为,导致该路径不可达。临时注释掉%USERPROFILE%\.wslconfig中所有内容再试 - 极少数情况是 Windows Defender 或第三方安全软件劫持了命名管道通信,可临时禁用实时保护,或在 Defender 设置中将
com.docker.backend.exe和dockerd.exe加入排除列表
真正麻烦的从来不是“怎么修”,而是“修到哪一层才算完”。很多人修到 wsl --list 正常就停手,结果 docker info 还是 500 错误——因为没验证 docker-desktop 里 dockerd 进程是否真在跑。最稳妥的闭环验证只有两步:wsl -d docker-desktop ps aux | grep dockerd 看进程存在,curl --unix-socket /run/docker.sock http://localhost/version 看返回 JSON。缺一不可。











