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

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


📌 一、问题背景

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

C盘空间被 Docker 数据占满 💥

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


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

误区 1:只修改 daemon.jsondata-root

json

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

结果:❌ 失败

原因
daemon.jsondata-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 → SettingsResourcesAdvanced

  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>

相关推荐
Patrick_Wilson1 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy1 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭1 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩2 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵3 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1113 天前
LM Studio Docker 部署——本地大模型一键启动
docker
曲幽4 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
武子康6 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
qq_369224339 天前
Windows全系通用!ntdll.dll文件丢失、报错、闪退问题的完整排查与修复教程
windows·dll·dll修复·dll丢失·dll错误
Alsn869 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker