90%的“Docker Engine stopped”实为WSL2异常、内存耗尽或虚拟化失效所致;wsl --shutdown可强制清理残留状态,重置Docker运行地基,需管理员权限执行并等待5秒后再启。

直接说结论:90% 的 “Docker Engine stopped” 不是 Docker 坏了,而是 WSL2 没跑起来、内存被榨干、或虚拟化底座塌了。
为什么 wsl --shutdown 能解决一半问题
WSL2 是 Docker Desktop 在 Windows 上的默认运行环境,它不是“随开随起”的轻量进程,而是一套带状态的 Linux 子系统。一旦异常退出(比如强制关机、内存不足被 Windows 杀掉),wsl 进程可能卡在后台但没真正释放资源,docker-desktop 和 docker-desktop-data 两个发行版会停留在 Stopped 状态——这时 Docker Desktop 就只能干等,最终报 “Engine stopped”。
执行 wsl --shutdown 强制终止所有 WSL 实例,相当于拔电源再插上,清空残留锁和 socket 文件。这不是重启 Docker,是重置它的地基。
- 必须用管理员权限打开 PowerShell 或 CMD 才能执行成功
- 执行后等 5 秒再启动 Docker Desktop,别急着点图标
- 验证是否生效:运行
wsl -l -v,确认两行输出状态都是Running
内存不足时 Docker 会被 Windows 主动 kill
WSL2 默认吃掉 1–2GB 内存,且不主动释放。当 Windows 物理内存使用率超过 90%,系统会优先干掉 WSL2 进程保主机稳定——你根本看不到错误日志,Docker Desktop 图标就变红了。
这不是配置问题,是 Windows 的资源仲裁机制在起作用。
- 按
Ctrl + Shift + Esc打开任务管理器 → “性能” → “内存”,看使用率 - 重点关掉
chrome.exe(尤其开了几十个标签页)、idea64.exe、AndroidStudio.exe、其他虚拟机 - 不要依赖 Docker 设置里的 “Memory limit”,那只是给容器设的,管不了 WSL2 自身开销
WSL2 功能没开或版本太旧,Docker 根本没机会启动
Docker Desktop 启动流程里,第一步就是调用 wsl 命令拉起发行版。如果 wsl 命令不存在、wsl --list 报错、或 wsl --update 提示失败,Docker 就连初始化都进不去,直接卡死在 “Starting the Docker engine”。
Windows 功能开关和 WSL 内核版本必须同时达标。
- 以管理员身份运行 PowerShell,执行
wsl --update;若提示 “No distributions installed”,先运行wsl --install - 运行
optionalfeatures.exe,确保勾选 “Windows Subsystem for Linux” 和 “Virtual Machine Platform” - 检查 BIOS/UEFI 中 CPU 虚拟化(Intel VT-x / AMD-V)是否开启——这是 WSL2 跑起来的物理前提
端口被占或 Hyper-V 冲突,Docker 绑定失败就静默退出
Docker Engine 启动时要监听 2375(HTTP)和 2376(HTTPS)端口。如果被 TeamViewer、VMware Workstation、甚至某些杀毒软件占用,它不会报错,而是直接放弃启动,托盘图标变红。
更隐蔽的是 Hyper-V 和 Windows Sandbox 共存冲突:它们和 WSL2 共享同一套虚拟化句柄,三者并存时 Docker Engine 可能拿不到设备访问权。
- 查端口占用:
netstat -ano | findstr :2375和netstat -ano | findstr :2376,记下 PID,去任务管理器结束对应进程 - 进 “控制面板 → 程序和功能 → 启用或关闭 Windows 功能”,只保留 “Windows Subsystem for Linux”,取消勾选 “Hyper-V” 和 “Windows Sandbox”
- 清理残留数据前先备份:删掉
%LOCALAPPDATA%\Docker\wsl\data\前,确保你不需要本地镜像——这个目录删了,docker images就全空了
最常被忽略的点:Docker Desktop 的 “Reset to factory defaults” 选项里,默认不保留镜像,但勾选 Keep my images and containers 后,它只保留 docker-desktop-data 发行版里的内容,而不会恢复你手动装的 WSL 发行版(如 Ubuntu-22.04)——这两者完全独立。别以为点了保留就万无一失。


















