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>

相关推荐
苦青藤12 小时前
从零搭建 WSUS 隔离网络:完整实战指南(内网离线补丁分发)
运维·windows·microsoft
Irene199114 小时前
Win11 自动更新导致 Docker Desktop 无法正常启动,Oracle SQL Developer 启动时报错
docker·更新
darkdragonking16 小时前
OpenEuler 22.03 ,以docker ce 安装 Milvus 及可视化工具
docker·容器·milvus
我叫张土豆18 小时前
V100 显卡部署 Qwen3-ASR-1.7B 语音识别模型(vLLM + Docker 完整教程)
docker·语音识别·vllm
Smoothcloud润云19 小时前
5大功能精修,重构AI算力使用体验!
java·人工智能·windows·算法·重构·编辑器·sublime text
极客先躯20 小时前
高级java每日一道面试题-2026年01月18日-实战篇[Docker]-如何清理仓库中的旧镜像?
java·运维·docker·容器
ModestCoder_20 小时前
windows/ubuntu解决挂梯子但是codex reconnecting五次的问题
linux·windows·ubuntu
玖釉-20 小时前
Vulkan 中 Shader 的 vert、frag、mesh、comp 全面解析:作用、关系、特点与工程实践
开发语言·c++·windows·算法·图形渲染
玖釉-21 小时前
Vulkan 示例解析:gltfscenerendering.cpp 如何渲染一个复杂 glTF 场景
c++·windows·图形渲染
一个人旅程~21 小时前
Windows的6月份安全启动证书过期如何查看是否过期是否需要更新如何操作
windows·经验分享·macos·电脑