目录

docker save 命令教程:导出和加载镜像(save、load、export、import)

docker save 和 docker load 用于迁移镜像;docker export 和 docker import 处理的是容器文件系统,镜像的配置可能不同。镜像的基本概念请参见 Docker 镜像。

语法

docker save [OPTIONS] IMAGE [IMAGE...]
docker load [OPTIONS]
docker export [OPTIONS] CONTAINER
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

参数

命令参数说明
save-o, --output string写入指定文件;未指定时输出到 STDOUT
save--platform strings只保存指定平台,可以用逗号分隔,例如 linux/amd64,linux/arm64/v8
load-i, --input string从指定 tar 归档文件读取;未指定时从 STDIN 读取
load--platform strings只加载指定平台
load-q, --quiet不显示加载输出
export-o, --output string将容器文件系统写入指定文件
import-c, --change list对创建的镜像应用 Dockerfile 指令
import-m, --message string设置导入镜像的提交信息
import--platform string如果服务器支持多平台,则设置平台

示例

保存镜像、gzip 压缩和加载

$ docker save -o nginx.tar nginx:1.30-alpine

$ ls -lh nginx.tar
-rw-------    1 root     root       25.7M Oct 25 15:31 nginx.tar

$ docker save nginx:1.30-alpine | gzip > nginx.tar.gz && ls -lh nginx.tar.gz
-rw-r--r--    1 root     root       24.9M Oct 25 15:31 nginx.tar.gz

$ docker load -i nginx.tar.gz
Loaded image: nginx:1.30-alpine

$ docker images nginx
IMAGE               ID             DISK USAGE   CONTENT SIZE   EXTRA
nginx:1.30-alpine   47928bf67eb6       93.5MB           27MB   U
  • docker save -o 将镜像写入 tar 归档文件;直接使用时,25.7MB 的文件包含镜像数据。
  • 这个镜像经过 gzip 压缩后为 24.9MB,只比原 tar 文件小 0.8MB,压缩效果有限。
  • docker load -i 可以直接读取 gzip 压缩的归档文件,并加载 nginx:1.30-alpine。
  • 加载后,使用 docker images 可以看到镜像;其 DISK USAGE 显示为 93.5MB,这是与归档文件大小不同的指标。

使用 export/import 导入文件系统

$ docker export web -o web-fs.tar && ls -lh web-fs.tar
-rw-------    1 root     root       60.5M Oct 25 15:31 web-fs.tar

$ docker import web-fs.tar myweb:snapshot
sha256:56e3f92534ca8c5aedd8de576ae2433f1864d3d3b51de847a8dc8dd7d503da4d

$ docker run --rm myweb:snapshot cat /usr/share/nginx/html/hi.txt
hello

$ docker image inspect -f '{{.Config.Cmd}}' nginx:1.30-alpine
[nginx -g daemon off;]

$ docker image inspect -f '{{.Config.Cmd}}' myweb:snapshot
[]

$ docker run --rm myweb:snapshot
docker: Error response from daemon: no command specified

Run 'docker run --help' for more information
  • docker export 将 web 容器的文件系统写入 tar 文件,再由 docker import 创建 myweb:snapshot 镜像。
  • 导入的镜像仍然包含文件:指定 cat /usr/share/nginx/html/hi.txt 可以读取到 hello。
  • nginx:1.30-alpine 的 .Config.Cmd 包含 nginx -g daemon off;,但 myweb:snapshot 的 .Config.Cmd 是空数组 []。
  • 由于导入的镜像没有默认命令,直接运行 docker run 会报告 no command specified;运行时需要明确指定命令。

相关章节

动手练习

练习:将 nginx:1.30-alpine 保存为 gzip 压缩的归档文件,再从该文件加载镜像。

答案
docker save nginx:1.30-alpine | gzip > nginx.tar.gz
docker load -i nginx.tar.gz

常见问题

docker save 和 docker export 有什么区别?

docker save 打包镜像,之后可以使用 docker load 加载镜像;docker export 导出的是容器文件系统,配合 docker import 会创建新镜像。

用 gzip 压缩 docker save 的结果可以节省多少空间?

这次 nginx:1.30-alpine 的 tar 文件为 25.7MB,gzip 压缩后为 24.9MB,差异有限。

为什么 docker import 后直接运行 docker run 会出现 no command specified?

导入的 myweb:snapshot 的 .Config.Cmd 是空数组 [],没有默认命令;指定 cat /usr/share/nginx/html/hi.txt 可以读取文件,但不带命令运行就会显示 no command specified。

更新于 2026年10月26日