同时恢复两个MariaDB备份后Docker Desktop无法启动的排查求助
Docker Desktop启动失败排查方案(迁移数据后)
问题背景
全新安装Docker Desktop并将数据迁移至副盘,此前正常运行小型应用,尝试同时恢复两个6GB的.sql备份文件(对应数据库约60GB,磁盘空间充足),数小时后容器以代码1退出,随后Docker Desktop崩溃,启动时弹出错误对话框,报错信息如下:
Docker.Core.HttpBadResponseException: {"message":"2 errors occurred:\n\t* starting keep alive in the data distro: waiting for wsl-keepalive to be ready: running wsl-keepalive in \"docker-desktop-data\": exit status 0xffffffff\n\t* checking if isocache exists: CreateFile \\\\wsl$\\docker-desktop-data\\isocache\\: The network name cannot be found.\n\n"} at Docker.Core.GoBackend.GoBackendClient.<PostNoBodyWithError>d__19.MoveNext() in C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.Core\GoBackend\GoBackendClient.cs:line 226 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__11.MoveNext() in C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.Engines\WSL2\LinuxWSL2Engine.cs:line 54 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() in C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\TaskExtensions.cs:line 29 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__6.MoveNext() in C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:line 91 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__6.MoveNext() in C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:line 118 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Docker.ApiServices.StateMachines.EngineStateMachine.<StartAsync>d__15.MoveNext() in C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\EngineStateMachine.cs:line 72 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Docker.Engines.Engines.<StartAsync>d__23.MoveNext() in C:\workspaces\4.16.x\src\github.com\docker\pinata\win\src\Docker.Engines\Engines.cs:line 109
排查方案
1. 检查并修复WSL2发行版状态
- 打开管理员PowerShell,执行命令查看WSL发行版状态:
确认wsl --list --verbosedocker-desktop和docker-desktop-data的状态,若为Stopped,依次执行启动命令:wsl --start docker-desktop-data wsl --start docker-desktop - 若启动失败,先关闭所有WSL实例:
等待10秒后重新尝试启动上述两个发行版。wsl --shutdown
2. 验证迁移后的VHDX文件完整性
- 找到你迁移后
docker-desktop-data对应的VHDX文件(比如D:\Docker\data\ext4.vhdx),执行挂载命令验证文件是否可用:wsl --mount D:\Docker\data\ext4.vhdx --type ext4 - 若挂载失败,尝试修复文件系统(确保VHDX未被占用):
wsl -d docker-desktop-data -u root fsck /dev/sda
3. 手动创建缺失的isocache目录
- 通过WSL命令进入
docker-desktop-data发行版并创建目录:
完成后重新启动Docker Desktop。wsl -d docker-desktop-data -u root mkdir -p /isocache chmod 755 /isocache exit
4. 重置WSL网络环境
- 执行以下命令重置网络相关组件:
重启电脑后再次启动Docker Desktop。netsh winsock reset netsh int ip reset all netsh winhttp reset proxy ipconfig /flushdns wsl --shutdown
5. 检查磁盘权限与空间
- 确认VHDX文件所在目录的权限,确保当前用户拥有完全控制权限;
- 再次确认副盘剩余空间充足,避免VHDX扩展时出现异常。
6. 重新注册docker-desktop-data发行版(备份后尝试)
- 先复制VHDX文件到安全路径做备份;
- 执行命令注销并重新注册发行版:
注意替换命令中的路径为你实际的VHDX存储路径,完成后启动Docker Desktop。wsl --unregister docker-desktop-data wsl --import docker-desktop-data D:\Docker\data D:\Docker\data\ext4.vhdx --version 2
内容的提问来源于stack exchange,提问作者Dantas
相关产品推荐
相关产品推荐

