不用镜像仓库,如何在两台主机之间复制 Docker 镜像?

用 docker save 把镜像导出为 tar 文件,scp/rsync 传到目标机后 docker load 导入,全程无需镜像仓库。本文给出命令与批量迁移技巧。

最佳实践
不用镜像仓库,如何在两台主机之间复制 Docker 镜像?封面

做法:源主机用 docker save -o 镜像.tar 镜像名 把镜像导出成 tar 包;用 scp/rsync/U盘 把 tar 拷到目标主机;目标主机用 docker load -i 镜像.tar 导入。适合内网隔离环境、临时迁移或不想搭私有仓库的场景。

三步操作

1. 源主机导出

docker save -o myapp_v1.2.tar myapp:1.2

2. 传输到目标主机

scp myapp_v1.2.tar user@target-host:/tmp/

3. 目标主机导入

docker load -i /tmp/myapp_v1.2.tar
docker images | grep myapp   # 验证

导入后镜像名与标签保持原样。

进阶技巧

一次导出多个镜像:

docker save -o bundle.tar myapp:1.2 nginx:1.25 redis:7

压缩传输(镜像大时显著省时):

docker save myapp:1.2 | gzip | ssh user@target 'gunzip | docker load'

一条管道完成导出、压缩、传输、导入,不落中间文件。

注意事项

  1. save/load 保留镜像的全部层和标签;与之相对,export/import 针对的是容器文件系统快照,会丢失历史与元数据,迁镜像要用前者。
  2. 多架构镜像(arm64/amd64)经 tar 迁移时按导出时的架构走,跨架构主机注意选择正确变体。
  3. 长期、多机分发还是建议搭私有仓库(如 Harbor),save/load 适合应急与小规模。

观测云对照

离线环境部署 DataKit 同样可行。 隔离网络中可用 save/load 方式分发 DataKit 镜像与所需集成镜像,完成日志与指标采集的离线部署。

常见问题(FAQ)

Q:docker load 后镜像名变成
A:导出时用了镜像 ID 而非 名称:标签,或导出前标签就没打好。重新打标签:docker tag <id> myapp:1.2

Q:tar 文件能校验完整性吗?
A:传输后用 md5sum 对比两端哈希;docker load 本身也会对损坏的 tar 报错。

Q:load 进来的镜像层会被共享去重吗?
A:会。与本地已有镜像共享相同的层,存储按层去重,不重复占空间。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台