使用docker save导出镜像为tar文件,配合时间戳命名、gzip压缩及find清理旧备份,可实现可靠备份与还原;恢复时用docker load加载,原始repo:tag保持不变。

直接用 docker save 把镜像导出为 tar 文件,再配合压缩、时间戳和清理,就能实现可靠备份。核心是保证镜像名不乱、文件可恢复、旧备份不堆积。
基础备份:导出单个镜像
最简方式就是用 docker save 输出为 tar:
docker save nginx:alpine -o nginx-alpine-$(date +%Y%m%d).tar- 镜像名带标签更安全(避免只写
nginx导致取到 latest 意外变更) -
$(date +%Y%m%d)加时间戳,方便识别和排序
批量备份:导出多个指定镜像
适合有固定镜像列表的场景,比如生产环境常用镜像:
- 先写一个镜像列表文件
images.txt,每行一个repo:tag:redis:7.2-alpine<br>mysql:8.0<br>portainer/portainer-ce:latest
- 脚本循环读取并保存:
while IFS= read -r img; do<br> [ -z "$img" ] && continue<br> name=$(echo $img | sed 's/[:\/]/-/g')<br> docker save "$img" -o "${name}-$(date +%Y%m%d).tar"<br>done < images.txt
增强版:自动压缩 + 清理旧备份
节省空间、防止磁盘打满:
- 导出后立刻用
gzip压缩:docker save nginx:alpine | gzip > nginx-alpine-$(date +%Y%m%d).tar.gz - 保留最近 7 天的备份,删掉更早的:
find /backup -name "*.tar*" -type f -mtime +7 -delete - 加
2>/dev/null忽略找不到文件的提示,让脚本更安静
恢复镜像:用 docker load 就行
备份不是目的,能还原才关键:
- 解压(如是 .gz):
gunzip nginx-alpine-20240501.tar.gz - 加载镜像:
docker load -i nginx-alpine-20240501.tar - 验证是否成功:
docker images | grep nginx - 注意:
load不会重命名镜像,原始 repo:tag 会原样恢复


















