如何将Windows容器下Docker Desktop的数据目录迁移至其他位置?
可靠的Windows容器Docker数据目录迁移方案(Win10 Pro + Docker Desktop 4.X)
我刚好处理过和你完全一致的场景,专门针对仅使用Windows容器的情况,给你两个经过验证的可靠方案,先从最推荐的配置文件修改法开始:
方案一:修改Docker Daemon配置文件(推荐)
之前你修改错了配置文件的位置,Windows容器的daemon配置不是用户目录下的windows-daemon.json,而是系统级的daemon.json,步骤如下:
- 彻底停止Docker相关进程:
- 右键托盘里的Docker图标,选择「Quit Docker Desktop」
- 打开服务管理器(运行
services.msc),停止Docker Desktop Service、Docker Engine、Docker Desktop Backend这三个服务 - 打开任务管理器,确认所有带「Docker」字样的进程都已结束
- 迁移原数据目录:
- 把
C:\ProgramData\Docker整个目录复制到你的目标路径,比如D:\DockerData - 复制完成后,删除原
C:\ProgramData\Docker目录(确保删干净,包括隐藏文件)
- 把
- 创建正确的daemon配置文件:
- 如果
C:\ProgramData\docker\config目录不存在,手动创建它 - 在该目录下新建
daemon.json文件,写入以下内容(注意路径用双反斜杠转义):{ "data-root": "D:\\DockerData" }
- 如果
- 启动Docker Desktop:
- 启动后检查容器后端是否正常运行,随便拉一个Windows镜像测试(比如
docker run mcr.microsoft.com/windows/servercore:ltsc2019 cmd),同时确认D:\DockerData下有新的文件写入
- 启动后检查容器后端是否正常运行,随便拉一个Windows镜像测试(比如
方案二:正确使用NTFS Junction链接(备用)
如果你之前用junction失败,大概率是操作顺序或权限问题,按以下步骤来:
- 同样先彻底停止所有Docker相关服务和进程(和方案一第一步完全一致)
- 完整复制原目录:
- 用
robocopy命令保证复制的完整性(管理员CMD下执行):robocopy "C:\ProgramData\Docker" "D:\DockerData" /E /COPYALL /R:3 /W:5 - 复制完成后,删除原
C:\ProgramData\Docker目录
- 用
- 创建Junction链接:
- 管理员CMD下执行:
mklink /J "C:\ProgramData\Docker" "D:\DockerData"
- 管理员CMD下执行:
- 启动Docker并验证:
- 启动Docker Desktop,测试容器运行,确认数据正常写入目标目录
为什么你之前的方法失败?
- 方法1失败:大概率是先创建junction再复制,导致原目录被锁定,复制不完整;或者没有彻底停止Docker服务,文件被占用
- 方法2失败:修改了错误的配置文件,Windows容器的daemon配置文件不在用户目录下,而是系统级的
C:\ProgramData\docker\config\daemon.json
注意事项
- 操作前一定要备份
C:\ProgramData\Docker目录,防止数据丢失 - 目标磁盘必须是NTFS格式,且有足够的剩余空间
- 如果启动后仍有问题,查看Docker Desktop的日志(设置→Resources→Advanced→查看日志),根据错误信息排查
内容的提问来源于stack exchange,提问作者131
相关产品推荐
相关产品推荐

