Docker 从 C 盘迁移到 D 盘使用教程(Windows + WSL2 + Docker Desktop)

一、适用场景

这份教程适合下面这种情况:

  • 系统是 Windows 10/11
  • 使用的是 Docker Desktop
  • 后端是 WSL2
  • 想把 Docker 的数据盘从 C 盘迁移到 D 盘
  • 目标路径类似:D:\ProgramData\Docker\DockerDesktopWSL

这份方法是 官方支持的稳定方案 ,不使用软链接,不手动剪切 wsl 文件夹。


二、先说结论

Docker Desktop 在 WSL2 模式下,真正占空间的核心数据一般在:

makefile 复制代码
C:\Users\你的用户名\AppData\Local\Docker\wsl

这里面通常会有一个很大的虚拟磁盘文件,用来保存:

  • 镜像
  • 容器
  • 构建缓存

正确迁移方式不是手动移动文件夹,而是:

  1. 打开 Docker Desktop
  2. 进入 Settings -> Resources -> Advanced
  3. 修改 Disk image location
  4. 选择 D 盘目标目录
  5. 点击 Apply & Restart
  6. 在弹窗里点击 Yes, move it

三、不要这样做

下面这些做法不推荐。

1. 不要手动剪切 wsl 文件夹

不要把:

makefile 复制代码
C:\Users\你的用户名\AppData\Local\Docker\wsl

直接剪切到 D 盘。

原因:

  • 这是 Docker 和 WSL 共同管理的数据目录
  • 里面有虚拟磁盘文件,不是普通文件夹
  • 手动移动容易导致 Docker 启动异常、数据损坏或路径失效

2. 不要用符号链接代替迁移

例如这类做法:

sql 复制代码
New-Item -ItemType SymbolicLink -Path "C:\Users\你的用户名\AppData\Local\Docker\wsl" -Target "D:\ProgramData\Docker\wsl"

也不推荐。

原因:

  • Docker Desktop 升级后可能失效
  • WSL 和 Windows 对链接路径处理并不总是稳定
  • 容易出现"看起来迁移了,实际上没真正迁移"的情况

四、迁移前准备

1. 确保 Docker Desktop 能正常启动

先确认 Docker 现在能用,左下角能看到:

arduino 复制代码
Engine running

2. 尽量停止正在运行的容器

在 Docker Desktop 里先停止重要容器,避免迁移时占用。

3. 准备目标目录

建议提前建好目标目录,例如:

makefile 复制代码
D:\ProgramData\Docker\DockerDesktopWSL

也可以只建到:

makefile 复制代码
D:\ProgramData\Docker

后面用 Docker Desktop 选择。


五、正式迁移步骤

第 1 步:打开 Docker Desktop

确保左下角显示:

arduino 复制代码
Engine running

第 2 步:进入设置页面

点击右上角齿轮图标,进入:

复制代码
Settings

然后点击:

rust 复制代码
Resources -> Advanced

第 3 步:找到 Disk image location

Advanced 页面中,找到:

arduino 复制代码
Disk image location

如果你当前还是默认位置,通常会在 C 盘。


第 4 步:修改为 D 盘路径

把路径改成你想存放 Docker 数据的位置,例如:

makefile 复制代码
D:\ProgramData\Docker\DockerDesktopWSL

第 5 步:点击 Apply & Restart

点击右下角:

复制代码
Apply & Restart

第 6 步:确认迁移

这时 Docker Desktop 会弹出提示:

arduino 复制代码
Move disk image?

直接点击:

arduino 复制代码
Yes, move it

这一步表示 Docker 会把当前的数据盘从 C 盘安全迁移到 D 盘。


六、迁移过程中会看到什么

迁移过程中可能出现这些现象,属于正常情况:

  • Docker Engine 暂时停止
  • 界面短暂转圈
  • 页面短时间不可操作
  • 迁移需要几十秒到几分钟

耗时取决于:

  • 当前 Docker 数据大小
  • C 盘和 D 盘的读写速度

七、迁移完成后如何验证

方法 1:看设置里的路径

再次进入:

rust 复制代码
Settings -> Resources -> Advanced

确认:

arduino 复制代码
Disk image location

已经变成:

makefile 复制代码
D:\ProgramData\Docker\DockerDesktopWSL

方法 2:看 D 盘目录

打开:

makefile 复制代码
D:\ProgramData\Docker\DockerDesktopWSL

如果迁移成功,通常会看到类似文件:

  • ext4.vhdx

这个文件就是 Docker 的核心数据盘。


方法 3:看 Docker 是否正常运行

执行命令:

复制代码
docker info

确认 Docker 正常返回信息,没有报错。


八、为什么迁移完成后 C 盘还会有 Docker 文件夹

迁移成功后,你仍然可能看到:

makefile 复制代码
C:\Users\你的用户名\AppData\Local\Docker

这通常是正常的。

因为这里还可能保留一些轻量级内容,例如:

  • 日志
  • 运行时信息
  • 配置文件
  • 锁文件

真正占空间的核心数据盘已经搬到了 D 盘,所以不用因为 C 盘还存在 Docker 文件夹而紧张。

判断重点

不是看 C 盘有没有 Docker 文件夹,而是看:

  • Disk image location 是否已经改到 D 盘
  • D 盘是否出现了 ext4.vhdx

九、如果迁移过程中出问题怎么办

情况 1:Apply 按钮是灰色

常见原因:

  • 你没有改动路径
  • Docker 还没识别到修改
  • 页面状态没刷新

解决办法:

  1. 重新选择一次目标目录
  2. 确认路径确实变化了
  3. 再点击 Apply & Restart

情况 2:Docker 一直转圈

可以尝试:

  1. 退出 Docker Desktop
  2. 在 PowerShell 执行:
arduino 复制代码
wsl --shutdown
  1. 重新打开 Docker Desktop

如果 Docker 本身能正常恢复,再重新走设置迁移流程。


情况 3:误删了 docker-desktop-data

如果之前误删或清空了 Docker 的 WSL 数据,不一定是坏事。

只要 Docker Desktop 还能正常重建并启动,仍然可以直接通过设置页修改 Disk image location,把新的数据盘放到 D 盘。


十、迁移完成后的推荐做法

迁移完成后,建议你以后项目数据也尽量放到 D 盘。

例如在 WSL / Docker 中做卷挂载时,可以使用:

bash 复制代码
-v /mnt/d/docker/mysql/data:/var/lib/mysql

说明:

  • Windows 的 D:\docker\mysql\data
  • 在 WSL 中对应的是 /mnt/d/docker/mysql/data

这样做有三个好处:

  • Docker 数据盘在 D 盘
  • 业务数据也在 D 盘
  • 更容易管理和备份

十一、推荐的目录规划

你可以参考下面这个结构:

bash 复制代码
D:\ProgramData\Docker\DockerDesktopWSL   # Docker Desktop 数据盘
D:\docker\mysql\data                     # MySQL 数据
D:\docker\mysql\conf                     # MySQL 配置
D:\docker\projects                        # 你的 compose 项目目录

十二、最终检查清单

迁移完成后,逐项检查:

  • Docker Desktop 可以正常打开
  • 左下角显示 Engine running
  • Settings -> Resources -> Advanced
  • Disk image location 已经是 D 盘路径
  • D 盘目录中已经出现 ext4.vhdx
  • docker info 可以正常执行

如果这些都满足,说明迁移已经成功。


十三、总结

Docker 从 C 盘迁移到 D 盘,最稳的方法就是:

  1. 不手动剪切 wsl 文件夹
  2. 不使用符号链接
  3. 直接用 Docker Desktop 的 Disk image location
  4. 通过 Apply & RestartYes, move it 完成官方迁移

如果你是 Windows + WSL2 + Docker Desktop 这套环境,这就是最推荐的方案。

相关推荐
红尘散仙5 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记6 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆6 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪7 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6167 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364577 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao7 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒9 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰10 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox10 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全