这报错大概率不是 docker 本体坏了,而是 Docker Desktop 依赖的 WSL2 环境/虚拟磁盘被强制重启搞坏了。
重点看这句:
wsl.exe --import-in-place docker-desktop ... ext4.vhdx
ERROR_FILE_NOT_FOUND
通常有几种可能:
ext4.vhdx 文件没了 / 路径不对了
- WSL 服务状态异常
- WSL 组件损坏
- Docker Desktop 的
docker-desktop / docker-desktop-data 发行版注册信息乱了
- 更少见:Windows 的虚拟化组件没正常启动
先说结论:优先按这个顺序排查
1)先确认 WSL 还能不能正常用
管理员 PowerShell 执行:
wsl --status
wsl -l -v
where wsl
正常的话:
where wsl 应该能看到 C:\Windows\System32\wsl.exe
wsl -l -v 应该能列出发行版
wsl --status 不该直接报离谱错误
如果连 where wsl 都找不到,那是 系统层面的 WSL 组件有问题。
2)检查 Docker 的 WSL 磁盘文件还在不在
去这两个目录看看:
%LOCALAPPDATA%\Docker\wsl\main\
%LOCALAPPDATA%\Docker\wsl\data\
重点看有没有:
一般常见是:
main\ext4.vhdx
data\ext4.vhdx
如果文件没了,那就是 Docker 的 WSL 磁盘丢了。
如果文件还在,可能是 注册信息坏了 或 VHDX 损坏。
3)先尝试重启 WSL 和 Docker
管理员 PowerShell:
wsl --shutdown
net stop LxssManager
net start LxssManager
然后再启动 Docker Desktop 试试。
如果 net stop LxssManager 提示服务名不对,也可以直接:
Restart-Service LxssManager
如果还是不行,继续下面。
常用修复方案
方案 A:WSL 正常,但 Docker 的发行版坏了
先看当前 Docker 发行版状态:
wsl -l -v
通常会看到类似:
docker-desktop
docker-desktop-data
如果这两个有残留但状态异常,可以尝试注销再让 Docker 重建。
注意:这可能会丢失 Docker 容器/镜像/卷数据。
如果你有重要数据,先别直接执行,先看后面的“数据保留”部分。
注销命令:
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
然后重新打开 Docker Desktop,它会自动重建。
如果只 docker-desktop 坏了,而 docker-desktop-data 还在,有时只注销前者即可:
wsl --unregister docker-desktop
然后启动 Docker 试试。
方案 B:Docker 的 VHDX 文件存在,但注册失败
你报错里是:
wsl.exe --import-in-place docker-desktop <...>\ext4.vhdx
这说明 Docker 正在试图把现有的 ext4.vhdx 重新注册成一个 WSL 发行版,但失败了。
这种情况可能是:
- VHDX 文件损坏
- 文件路径带权限问题
- WSL 内部组件异常
可以先手工确认文件存在:
dir "$env:LOCALAPPDATA\Docker\wsl\main\"
dir "$env:LOCALAPPDATA\Docker\wsl\data\"
如果文件存在,再尝试:
wsl --shutdown
然后升级/修复 WSL:
wsl --update
再试 Docker。
方案 C:WSL 本身损坏,重装/修复 WSL
如果 wsl --status、wsl -l -v 都异常,先修 WSL。
管理员 PowerShell:
dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
然后:
wsl --update
再重启电脑。
如果还是不行,可以尝试:
sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth
这个是修系统组件的。
方案 D:彻底重置 Docker Desktop
如果你不在乎 Docker 里的本地数据,最快的办法一般是:
- 退出 Docker Desktop
- 执行:
wsl --shutdown
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
- 删除残留目录(谨慎):
%LOCALAPPDATA%\Docker
%APPDATA%\Docker
%APPDATA%\Docker Desktop
%PROGRAMDATA%\DockerDesktop
- 重新安装最新版 Docker Desktop
这基本能解决大多数“强制重启后 Docker + WSL 坏掉”的问题。
如果你担心 Docker 里的数据丢失
这个很重要。
Docker Desktop 里的镜像、容器、卷,很多都在:
%LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx
如果这个文件还在,先备份它:
copy "$env:LOCALAPPDATA\Docker\wsl\data\ext4.vhdx" "D:\backup\docker-data-ext4.vhdx"
或者直接手动复制到别的盘。
建议先这样做
- 备份:
%LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx
%LOCALAPPDATA%\Docker\wsl\main\ext4.vhdx
- 再尝试
unregister / 重装 Docker
因为一旦误操作,容器数据可能恢复不了。
你这个报错更像哪种情况?
从你给的信息看:
Wsl/Service/RegisterDistro/CreateVm/HCS/ERROR_FILE_NOT_FOUND
更像这两类:
情况 1:ext4.vhdx 文件实际上没了
最常见。
Docker 想导入 ext4.vhdx,结果文件不存在,所以直接失败。
情况 2:WSL/Hyper-V 创建虚拟机链路坏了
也可能文件在,但 WSL 服务/HCS(Host Compute Service)创建 VM 时找不到底层依赖。
这时可以顺手检查这些服务是否正常:
Get-Service LxssManager
Get-Service vmcompute
Get-Service hns
如果没启动,可以尝试:
Start-Service vmcompute
Start-Service hns
Start-Service LxssManager
我建议你直接按这个最短流程来
如果你不在乎 Docker 本地数据
管理员 PowerShell 直接:
wsl --shutdown
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
wsl --update
然后重新打开 Docker Desktop。
不行就重装 Docker Desktop。
如果你在乎 Docker 本地数据
先做:
- 打开:
%LOCALAPPDATA%\Docker\wsl\main\
%LOCALAPPDATA%\Docker\wsl\data\
- 看
ext4.vhdx 在不在
- 先把
data\ext4.vhdx 备份出来
- 再执行修复
如果你愿意,我可以继续一步一步带你排查
你下一条把下面几个结果发我,我能基本判断是哪种坏法:
wsl --status
wsl -l -v
where wsl
dir "%LOCALAPPDATA%\Docker\wsl\main\"
dir "%LOCALAPPDATA%\Docker\wsl\data\"
如果你怕丢数据,也顺便告诉我:
- 你 Docker 里面有没有重要容器/卷/数据库
- 现在
data\ext4.vhdx 还在不在
我可以按“保数据优先”的方式给你出方案。