目录
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日