最常用、最稳妥的 Docker 镜像迁移方式是导出为 tar 文件再导入,适用于跨服务器、离线环境、版本一致或兼容的场景,不依赖网络和私有仓库,核心命令为 docker save 和 docker load,支持多镜像打包、保留标签与元数据,通过 scp 或 U 盘传输后执行 docker load 即可完整还原。

最常用、最稳妥的 Docker 镜像迁移方式是 导出为 tar 文件再导入,适用于跨服务器、离线环境、版本一致或兼容的场景。不依赖网络、不依赖私有仓库、操作直接可控。
单机或跨主机迁移镜像(推荐)
这是绝大多数情况下的首选方案,核心命令只有两个:save 和 load。
- 在源机器上导出镜像:
docker save -o app.tar nginx:1.23 redis:7.2 myapp:v2.1
可一次导出多个镜像,文件包含所有层和元数据,保留标签和历史。 - 把 tar 文件复制到目标机器(用 scp / U盘 / rsync 等):
scp app.tar user@target:/tmp/ - 在目标机器上导入:
docker load -i /tmp/app.tar
导入后执行docker images可看到原样镜像,标签不变,可直接运行。
Windows Docker Desktop 迁移(含容器与数据卷)
若需迁移完整开发环境(不只是镜像),重点在 WSL2 发行版的备份与还原。
- 关闭 Docker Desktop,以管理员身份运行 PowerShell
- 导出 WSL2 发行版(含所有镜像、容器、卷、网络配置):
wsl --export docker-desktop-data D:\docker-backup.tar - 在新电脑上清理旧环境后导入:
wsl --import docker-desktop-data D:\wsl-data D:\docker-backup.tar --version 2 - 重启 Docker Desktop,原有镜像、已停止容器、命名卷都会恢复
调整本地存储路径(解决磁盘空间不足)
当本机 Docker 占用 /var/lib/docker 太大,想换挂载点时,用配置驱动迁移。
- 停服务:
sudo systemctl stop docker - 迁移数据(保留原路径做备份):
sudo rsync -aP /var/lib/docker/ /mnt/newdisk/docker/ - 修改
/etc/docker/daemon.json:{"data-root": "/mnt/newdisk/docker"} - 启动并验证:
sudo systemctl start docker && docker info | grep "Docker Root Dir"
注意事项
迁移不是复制粘贴那么简单,几个关键点容易踩坑:
- 版本兼容性:目标机 Docker 版本不能比源机低太多(建议同版或高一个 minor 版)
-
镜像标签别丢:导出时写全
repo:tag,导入后docker images检查是否匹配 -
数据卷要单独处理:
docker save不含 volume 数据,需用docker run -v挂载或tar打包对应目录 -
权限与 SELinux(CentOS/RHEL):新路径需
chown root:root,SELinux 上要打标签:sudo semanage fcontext -a -t container_file_t "/mnt/newdisk/docker(/.*)?"


















