最稳妥的批量导出镜像是用 docker save,它保留标签、历史和分层结构;可导出全部有名字镜像为单个 tar 文件,或按需导出多个指定镜像合并共享层,也支持自动化脚本生成独立压缩存档。

直接用 docker save 批量导出镜像最稳妥,它保留标签、历史和分层结构,迁移后能直接用,不丢元数据。
导出全部镜像(含命名规范)
一条命令就能把所有有名字的镜像打包成一个 tar 文件:
sudo docker save $(sudo docker images --format "{{.Repository}}:{{.Tag}}" | grep -v "<none>") -o all_images.tar</none>- 其中
grep -v "<none>"</none>排除无名镜像(如悬虚镜像),避免报错 - 若需包含所有镜像(包括
<none>:<none></none></none>),删掉| grep -v "<none>"</none>即可 - 生成的
all_images.tar可直接拷贝到其他机器,用docker load -i all_images.tar加载
按需批量导出多个指定镜像
适合导出业务依赖的几个关键镜像,省空间、易管理:
docker save -o app-images.tar nginx:1.25 redis:7.0 mysql:8.0- 多个镜像写在同一行,
docker save会自动合并共享层,不会重复存储基础镜像 - 建议加上版本号,比如
nginx:1.25而非nginx:latest,避免环境不一致
自动化脚本导出(带目录与文件名整理)
适合长期运维或定期备份,让每个镜像单独存档、命名清晰:
- 新建脚本
export-images.sh,内容如下: #!/bin/bashmkdir -p ./exportsdocker images --format "{{.Repository}}:{{.Tag}}" | grep -v "<none>" | while read img; do</none>fname=$(echo "$img" | sed 's/:/_/g' | sed 's/\//_/g')docker save -o "./exports/${fname}.tar" "$img"done- 加执行权限后运行:
chmod +x export-images.sh && ./export-images.sh - 结果:每个镜像生成独立 tar 文件,如
nginx_1.25.tar、myapp_v2.3.tar
导出时压缩节省空间
镜像体积大时,边导出边压缩更高效:
docker save nginx:1.25 redis:7.0 | gzip > images.tar.gz- 导入时解压再加载:
gunzip -c images.tar.gz | docker load - 注意:不能直接
docker load -i images.tar.gz,必须先解压或用管道传入











