【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)-CSDN博客
【笔记】Windows 系统迁移 Ubuntu(Preview)应用到其他磁盘_windows 迁移 ubuntu-CSDN博客
🧯 WSL 迁移后 Docker Desktop 异常问题解决笔记
一、问题背景
在将 WSL 发行版(如 Ubuntu、Podman Machine、NVIDIA Workbench 等)从系统盘迁移到其他盘后,启动 Docker Desktop 时出现如下典型报错:
starting services: initializing Docker API Proxy:
setting up docker api proxy listener:
open \\.\pipe\docker_engine: Access is denied
或 CLI 报错:
error during connect: Head "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/_ping":
The system cannot find the file specified.
二、此前已尝试的方案 (仍具参考价值)
在本流程推出前,已尝试以下“重装相关”方案,但均未能解决问题,且造成了镜像与数据丢失:
-
彻底卸载并清理 Docker Desktop
-
卸载应用 → 删除
Program Files\Docker
、%LocalAppData%\Docker
、%AppData%\Docker
、%USERPROFILE%\.docker
等目录Remove-Item "D:\Program\Docker" -Recurse -Force Remove-Item "$env:USERPROFILE\AppData\Local\Docker" -Recurse -Force Remove-Item "$env:USERPROFILE\AppData\Roaming\Docker" -Recurse -Force Remove-Item "$env:USERPROFILE\.docker" -Recurse -Force
-
用火绒等软件清理注册表中 Docker 相关项
-
-
重新安装最新版本 Docker Desktop
-
下载安装包 → 安装到默认路径
-
重启后仍然报 “pipe…Access is denied”
-
⚠️ 代价:已下载的镜像与容器数据全部丢失,但问题依旧,说明单纯的重装无法解决 WSL 底层路径与权限问题。
三、解决步骤
(一)关闭相关进程
须以管理员身份运行 PowerShell
# 关闭所有 WSL 实例
wsl --shutdown
# 终止与 WSL、Docker 相关的进程
taskkill /f /im wsl.exe /im powershell.exe /im cmd.exe /im "Docker Desktop.exe"
Stop-Service com.docker.service -Force # 如果存在 Docker Windows 服务
# 停止 Podman Machine(如使用)
podman machine stop
…
(二)升级 WSL 环境
wsl --update
-
若遇网络或更新包下载错误(403),可多次重试或检查 Windows Update 服务。
-
当提示“已安装最新版本的适用于 Linux 的 Windows 子系统”即完成。
(三)配置 WSL 交换文件路径
-
打开 设置 → 适用于 Linux 的 Windows 子系统
-
进入 内存和处理器 选项卡
-
设置:
-
交换大小:如
16384 MB
-
交换文件位置:迁移后绝对路径,例如
I:\WSL\Ubuntu\ext4.vhdx
-
-
保存并执行:
wsl --shutdown
使配置生效。
(四)重启 Docker Desktop 及验证
-
启动或“以管理员身份运行” Docker Desktop
-
如仍异常,可在 Docker Desktop 界面:
Settings → Troubleshoot → Reset to factory defaults -
验证恢复:
docker info docker run hello-world
四、关键说明
-
完整流程优先:卸载/重装 Docker Desktop 必须与 WSL 层面的进程关闭、升级、swap 路径配置相结合,否则无法根治。
-
管理员权限:所有命令务必在“以管理员身份”启动的 PowerShell 中执行。
-
路径与权限校验:确保 swap 文件及 WSL vhdx 均位于迁移后盘符,路径正确且有读写权限。
通过上述流程,应该可彻底解决由于 WSL 发行版迁移造成的 Docker Desktop 守护进程启动失败、命名管道访问被拒等问题,恢复容器正常使用。