一、适用场景
这份教程适合下面这种情况:
- 系统是 Windows 10/11
- 使用的是 Docker Desktop
- 后端是 WSL2
- 想把 Docker 的数据盘从 C 盘迁移到 D 盘
- 目标路径类似:
D:\ProgramData\Docker\DockerDesktopWSL
这份方法是 官方支持的稳定方案 ,不使用软链接,不手动剪切 wsl 文件夹。
二、先说结论
Docker Desktop 在 WSL2 模式下,真正占空间的核心数据一般在:
makefile
C:\Users\你的用户名\AppData\Local\Docker\wsl
这里面通常会有一个很大的虚拟磁盘文件,用来保存:
- 镜像
- 容器
- 卷
- 构建缓存
正确迁移方式不是手动移动文件夹,而是:
- 打开 Docker Desktop
- 进入
Settings -> Resources -> Advanced - 修改 Disk image location
- 选择 D 盘目标目录
- 点击 Apply & Restart
- 在弹窗里点击 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 还没识别到修改
- 页面状态没刷新
解决办法:
- 重新选择一次目标目录
- 确认路径确实变化了
- 再点击
Apply & Restart
情况 2:Docker 一直转圈
可以尝试:
- 退出 Docker Desktop
- 在 PowerShell 执行:
arduino
wsl --shutdown
- 重新打开 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 -> AdvancedDisk image location已经是 D 盘路径- D 盘目录中已经出现
ext4.vhdx docker info可以正常执行
如果这些都满足,说明迁移已经成功。
十三、总结
Docker 从 C 盘迁移到 D 盘,最稳的方法就是:
- 不手动剪切
wsl文件夹 - 不使用符号链接
- 直接用 Docker Desktop 的 Disk image location
- 通过 Apply & Restart 和 Yes, move it 完成官方迁移
如果你是 Windows + WSL2 + Docker Desktop 这套环境,这就是最推荐的方案。