首页/云/Docker 容器速查/docker save 一次导出多个镜像
镜像与构建107 条

docker save 一次导出多个镜像

把多个镜像打包进同一个归档:适合基础镜像加应用镜像的离线交付,目标机一次 load 即可得到全部标签。

Docker 容器速查云更新于 2026-10-13

一次导出多个镜像

docker save 可以接受多个镜像引用,把它们写进同一个 tar 归档,归档里保留每个镜像的名称、标签与分层历史。目标机执行 docker load -i 即可一次性得到全部镜像与标签,省掉多次传输与逐包核对,常用于内网交付「应用镜像 + 数据库镜像 + 缓存镜像」这类固定组合。它是 Docker CLI 的通用能力,Linux 与 Docker Desktop 都支持;归档内容与操作系统无关,只与镜像自身的目标架构有关。

基本信息

语法docker save -o 归档.tar 镜像1 镜像2 …
输出默认打到标准输出,-o 指定写文件
还原docker load -i 归档.tar
前提本地已有全部镜像,磁盘余量足够

典型使用场景

  • 离线交付整套环境:应用镜像与依赖的数据库、缓存镜像一起打包,目标机一次 load 就齐
  • 给测试环境留档:把某次验证通过的镜像组合固化下来,方便复现当时的版本组合
  • 镜像仓库不可达时的应急通道:从本地已有镜像导出成介质,搬到另一台机器使用
  • 迁移镜像仓库前的搬运:把要保留的多个镜像合并导出,避免逐个传输与反复核对
  • 交付验收留证:归档与校验值一起交给对方,作为该批次的版本凭证

合并导出与还原

合并导出与还原
# 一次导出三个镜像到一个归档
docker save -o bundle.tar app/web:1.0 postgres:16-alpine redis:7-alpine

# 大镜像先确认磁盘空间是否够用
docker system df

# 目标机导入,归档内的名称与标签原样恢复
docker load -i bundle.tar

# 核对导入结果与平台架构
docker images --format '{{.Repository}}:{{.Tag}} {{.ID}}'
docker image inspect postgres:16-alpine --format '{{.Architecture}}/{{.Os}}'

写法与注意点

写法作用注意
-o 归档文件把归档写入指定文件省略 -o 时输出到标准输出,用重定向写法要另外生成校验值
镜像列表按命令行顺序写入同一归档归档体积近似各镜像之和,复用共享层的镜像不会成倍膨胀
docker load -i按归档内的名称与标签还原目标机已有同名同标签时以导入内容覆盖,属预期行为
合并归档只减少传输次数,不解决架构差异:源机导出的 amd64 镜像在 arm64 机器上仍不能直接运行,跨架构交付需要在源端分别构建对应平台的镜像。
只导出不含父层的镜像时可用 docker save 的 --platform 指定平台变体,老版本 CLI 无此参数,脚本里要按目标环境确认可用性。

易错点

  • 目标机需要改标签使用:归档不会自动改名,load 之后用 docker tag 重新打标签,不要试图改归档里的文件名
  • 把归档当增量备份:save 每次都是全量,多个归档之间不能叠加恢复,镜像有更新就要重新导整包
  • 跨版本交付不验证:过老的 daemon 可能读不了新版归档格式,导入前在目标机先做一次 load 验证
  • 未校验直接投产:传输中断产生的半截 tar 会 load 失败或得到不完整镜像,导入前对归档做 sha256 校验

数据来源与参考

  • Docker 官方 CLI 参考:docker image save 多镜像参数(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌