【实践记录】Windows 解决 DockerDesktop.vhdx 迁移出错并成功移动到 D 盘
一、问题背景
Windows 上使用 Docker Desktop 一段时间后,C 盘空间被大量占用。
用 WizTree 快速扫描 C 盘后,发现一个占用空间较大的文件,有二三十 GB:
C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx这个文件是 Docker Desktop 的虚拟磁盘文件,里面通常包含:
Docker 镜像
Docker 容器
Docker volume
构建缓存
数据库容器数据
开发环境数据随着 Docker 使用时间增加,DockerDesktop.vhdx 可能会占用几十 GB,导致 C 盘空间不足。
目标是:
将 DockerDesktop.vhdx 从 C 盘移动到 D 盘
释放 C 盘几十 GB 空间二、迁移时出现的错误
在 Docker Desktop 中进入:
Settings → Resources → Advanced → Disk image location尝试把 Docker 磁盘镜像位置从 C 盘改到 D 盘时,出现报错:
Docker Desktop - Settings not applied
An error occurred while applying the 'Disk image location' setting.
The previous value has been restored.
status code not OK but 500: Unhandled exception:
Source and destination directory owners mismatch.中文意思大致是:
Docker Desktop 设置没有应用成功。
应用 Disk image location 设置时发生错误。
之前的设置已经被恢复。
错误代码 500:
源目录和目标目录的所有者不匹配。关键错误是:
Source and destination directory owners mismatch也就是:
源目录和目标目录所有者不一致三、前面错误的排查方向
最开始看到这个报错时,容易以为是 D 盘目标目录权限或所有者不对。
例如可能会想到:
修改 D 盘目录所有者
修改 D 盘目录权限
给 SYSTEM / Administrators 授权但这次实际情况里,通过手动修改文件所有者/目录权限并不是正确解决方式。
真正的问题不是简单的 Windows 文件夹 owner 设置,而是:
Docker Desktop 当前后端模式不合适,导致 Disk image location 迁移功能无法正确完成。所以不要把重点放在手动改目录所有者上,也不建议直接用命令强行修改权限。
四、真正有效的解决方法:启用 WSL2 后端引擎
后面进入 Docker Desktop 设置,发现关键是先启用 WSL2 后端。
路径是:
Docker Desktop
→ Settings
→ General
→ Use the WSL 2 based engine勾选:
Use the WSL 2 based engine然后点击:
Apply & Restart让 Docker Desktop 重启。
这一步是关键。
因为在没有启用 WSL2 后端引擎之前,Docker Desktop 的 Disk image location 迁移可能会失败,并出现前面的错误:
Source and destination directory owners mismatch.启用 WSL2 后端之后,Docker Desktop 的磁盘镜像迁移功能才能正常工作。
五、再次修改 Disk image location 到 D 盘
启用 WSL2 后端引擎后,再次进入:
Docker Desktop
→ Settings
→ Resources
→ Advanced
→ Disk image location把位置从 C 盘改到 D 盘,例如:
D:\DockerDesktop或者:
D:\Docker\DockerDesktop然后点击:
Apply & Restart这次 Docker Desktop 成功完成迁移。
六、迁移前后路径
迁移前,DockerDesktop.vhdx 位于:
C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx迁移后,Docker Desktop 会把虚拟磁盘移动到 D 盘设置的新位置,例如:
D:\DockerDesktop\DockerDesktop.vhdx或者 Docker Desktop 自动创建的对应目录下。
最终结果:
DockerDesktop.vhdx 成功移动到 D 盘
C 盘释放几十 GB 空间
Docker Desktop 可以正常启动
原来的 Docker 数据没有丢失七、迁移后检查
迁移完成后,可以执行:
docker ps查看容器是否正常。
执行:
docker images查看镜像是否还在。
执行:
docker system df查看 Docker 当前占用空间。
如果这些命令都能正常执行,说明 Docker Desktop 已经正常工作。
八、不要手动剪切 DockerDesktop.vhdx
不建议直接手动移动这个文件:
C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx不要直接:
剪切 DockerDesktop.vhdx → 粘贴到 D 盘因为它是 Docker Desktop 正在管理的虚拟磁盘文件。
手动移动可能导致:
Docker Desktop 找不到虚拟磁盘
Docker Desktop 启动失败
镜像、容器、volume 无法识别
Docker 数据损坏正确方式应该是:
通过 Docker Desktop 设置里的 Disk image location 迁移九、完整解决路径
1. 发现 C 盘空间不足
2. 定位到 DockerDesktop.vhdx 占用几十 GB
3. 文件位置是:
C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx
4. 在 Docker Desktop 中修改 Disk image location 到 D 盘
5. 出现错误:
Docker Desktop - Settings not applied
status code not OK but 500
Source and destination directory owners mismatch
6. 一开始容易误以为是目录 owner / 权限问题
7. 但实际不需要通过手动修改文件所有者解决
8. 进入 Docker Desktop 设置:
Settings → General
9. 启用:
Use the WSL 2 based engine
10. 点击:
Apply & Restart
11. 再次进入:
Settings → Resources → Advanced → Disk image location
12. 将位置改到 D 盘
13. 点击:
Apply & Restart
14. DockerDesktop.vhdx 成功迁移到 D 盘
15. C 盘释放几十 GB 空间十、最终总结
这次迁移失败的报错是:
Source and destination directory owners mismatch.表面上看像是源目录和目标目录所有者不一致,但这次真正有效的解决方式并不是手动修改目录所有者,而是:
先启用 Docker Desktop 的 WSL2 后端引擎,
再重新使用 Disk image location 迁移 DockerDesktop.vhdx。最终正确路径是:
Docker Desktop
→ Settings
→ General
→ Use the WSL 2 based engine
→ Apply & Restart
然后:
Docker Desktop
→ Settings
→ Resources
→ Advanced
→ Disk image location
→ 改到 D 盘
→ Apply & Restart最终效果:
DockerDesktop.vhdx 成功移动到 D 盘
C 盘释放几十 GB 空间
Docker Desktop 正常运行
Docker 镜像、容器、volume 数据正常保留