Docker Windows C盘爆满迁移到D盘:完整试错与成功路径

一份来自实战的 Docker Desktop for Windows 数据迁移指南


📌 一、问题背景

作为一名开发者,我在使用 Docker Desktop for Windows 时遇到了一个令人崩溃的问题:

C盘空间被 Docker 数据占满 💥

系统频繁提示空间不足,严重影响了日常开发工作。经过一番折腾,我终于找到了正确的迁移方法。在此分享我的试错历程,希望能帮助到遇到同样问题的朋友。


❌ 二、常见误区与失败尝试

误区 1:只修改 daemon.json 的 data-root

json

复制代码
{
  "data-root": "D:\\DockerData"
}

结果:❌ 失败

原因 :
daemon.json 的 data-root 只影响 Docker 引擎的数据目录,但 Docker Desktop 使用 WSL2 后端时,WSL 虚拟机数据仍然存储在默认位置:

text

复制代码
C:\Users\<用户名>\AppData\Local\Docker\wsl

误区 2:手动移动 WSL 目录

直接复制 wsl 目录到 D 盘,然后修改注册表。

结果:❌ 失败

原因 :

WSL2 的 ext4.vhdx 文件与系统绑定,手动移动会导致 Docker 无法启动。


误区 3:使用 WSL 命令迁移但不配置 Docker Desktop

powershell

复制代码
wsl --export docker-desktop D:\docker-desktop.tar
wsl --unregister docker-desktop
wsl --import docker-desktop D:\DockerData\wsl D:\docker-desktop.tar

结果:❌ 部分成功,但 Docker 仍会在 C 盘重建数据

原因 :

Docker Desktop 有自己的配置文件,需要同时修改。


✅ 三、正确的迁移步骤

步骤 1:备份重要数据

powershell

复制代码
# 备份 Docker 镜像示例
docker save homeassistant/home-assistant:latest -o D:\DockerData\homeassistant.tar

💡 提示:如果有多个重要镜像,请逐一备份。


步骤 2:关闭 Docker Desktop

右键托盘图标 → Quit Docker Desktop


步骤 3:通过 Docker Desktop 界面配置(🔥 最关键的一步)

  1. 打开 Docker Desktop → Settings → Resources → Advanced

  2. 找到 Disk image location

  3. 点击 Browse ,选择 D:\DockerData\DockerDesktopWSL

  4. 点击 Apply & Restart

⚠️ 注意:请确保目标目录已提前创建好。


步骤 4:删除 C 盘旧数据

powershell

复制代码
# 删除 C 盘旧的 WSL 数据(请将 <用户名> 替换为你的实际用户名)
Remove-Item "C:\Users\<用户名>\AppData\Local\Docker\wsl" -Recurse -Force

步骤 5:验证迁移结果

powershell

复制代码
# 检查 WSL 状态
wsl --list --verbose

# 验证 Docker 是否正常工作
docker run --rm hello-world

📁 四、关键配置文件说明

1. Docker Desktop 配置文件

路径 :%APPDATA%\Docker\settings-store.json

json

复制代码
{
  "CustomWslDistroDir": "D:\\DockerData\\DockerDesktopWSL",
  "SettingsVersion": 43
}

2. Docker Engine 配置文件

路径 :%USERPROFILE%\.docker\daemon.json

⚠️ 重要 :WSL2 模式下,不要设置 data-root,否则会导致容器无法启动!

json

复制代码
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false
}

🔧 五、常见问题排查

问题 1:容器启动失败

错误信息:

text

复制代码
invalid rootfs: stat /run/desktop-containerd/daemon/.../D:\DockerData/rootfs/...: no such file or directory

解决方案 :

删除 daemon.json 中的 data-root 配置,然后重启 Docker Desktop。


问题 2:WSL 位置未更新

解决方案 :

检查 settings-store.json 中的 CustomWslDistroDir 路径是否正确。


问题 3:C 盘空间仍不足

解决方案 :

手动删除旧的 WSL 目录后,如果没有立即释放空间,可以试试:

powershell

复制代码
# 以管理员身份运行
Optimize-VHD -Path "C:\Users\<用户名>\AppData\Local\Docker\wsl\disk\*.vhdx" -Mode Full

或者使用 Windows 自带的"磁盘清理"工具。


🔍 六、验证方法

powershell

复制代码
# 1. 检查 WSL 分发版位置
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\*" | 
  Where-Object { $_.DistributionName -like "*docker*" } | 
  Select-Object DistributionName, BasePath

# 2. 验证 Docker 运行
docker run --rm hello-world

# 3. 检查 C 盘剩余空间
Get-Volume -DriveLetter C | 
  Select-Object FreeSpace, Size

📊 七、总结与建议

🎯 成功要点

要点 说明
✅ 使用 Docker Desktop 界面配置 这是最可靠的迁移方式
✅ 不要手动修改 data-root WSL2 模式下会导致冲突
✅ 及时清理旧数据 迁移完成后手动删除 C 盘旧目录

🛡️ 预防措施

1. 定期清理无用镜像和容器

powershell

复制代码
docker system prune -a

2. 开启 Docker 的 GC 功能

json

复制代码
{
  "builder": {
    "gc": {
      "enabled": true,
      "defaultKeepStorage": "20GB"
    }
  }
}

3. 设置镜像自动清理策略(可选)


📈 八、迁移结果展示

项目 迁移前 迁移后
WSL 位置 C:\Users\...\Docker\wsl D:\DockerData\DockerDesktopWSL
C 盘释放空间 --- ~5GB
Docker 状态 ❌ C 盘爆满 ✅ 正常运行

💬 写在最后

这次迁移经历让我深刻体会到:

面对技术问题时,不要盲目尝试,要先理解原理。

Docker Desktop 的 WSL2 后端有其独特的存储机制,只有通过官方提供的配置方式才能正确迁移。

希望这篇文章能帮到你!如果有问题,欢迎在评论区留言讨论。


🔗 参考链接


<div align="center">

👍 点赞 | ⭐ 收藏 | 👀 关注

你的支持是我创作的动力!🚀

</div>

相关推荐
少年的范儿42 分钟前
Windows 安装 MySQL 8.4 教程(ZIP 解压版):配置 my.ini、初始化数据库与启动服务
数据库·windows·mysql
牛马工作号1 小时前
Copyparty 轻量文件共享:Docker Compose 部署、权限与多协议使用全指南
运维·docker·容器
胖纸不争1 小时前
EnergyStarZ:让 Windows 后台进程给前台让路的能效管理器(v1.2 发布)
windows·性能优化·c#·win32·ef core
oioihoii2 小时前
Windows部署MySpeed自建测速服务:Docker运行后直接测速,再配置固定公网地址远程查看
运维·docker·容器
2501_915909063 小时前
Windows 上用 VS Code 调试 iPhone 真机 App,KXBuild 断点、崩溃定位实操
ide·windows·vscode·ios·iphone·个人开发·敏捷流程
情 九3 小时前
MCP 开发环境搭建:Mac 与 Windows 跑通 Python 服务和 stdio 客户端
windows·python·macos·mcp
代码派3 小时前
PostgreSQL 同构迁移上云方案|NineData 数据复制、实时增量与一致性校验
数据库·postgresql·上云·ninedata·迁移·数据库迁移·版本升级
Jack N4 小时前
【Strapi 系列之八】二次开发 + 生产部署,Docker + PostgreSQL + Nginx 一把梭
nginx·docker·postgresql·strapi
懂点Tech12 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
岁月宁静14 小时前
一个 AI 项目从本地到上线,要经过哪些步骤?全流程讲清楚
python·docker·agent