Docker镜像自动化备份必须依赖脚本实现定期、多镜像、带时间戳及自动清理,核心命令为docker save结合gzip压缩,配合Bash脚本批量处理、cron定时执行、日志记录与过期文件清理。

Docker 镜像导出本身不依赖脚本也能手动完成,但要实现定期、多镜像、带时间戳、自动清理旧备份的自动化备份,就必须靠脚本驱动。
核心命令:save + gzip 是基础
导出单个镜像最直接的方式是:
docker save -o myapp.tar myapp:latest
如果想压缩节省空间,加个管道:
docker save myapp:latest | gzip > myapp-latest.tar.gz
注意:docker save 导出的是镜像层(含所有父层),不是运行时状态;它不包含容器配置、卷数据或网络设置——这些需额外处理。
用 Bash 脚本批量导出指定镜像
以下是一个轻量实用的备份脚本片段(可保存为 backup-images.sh):
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
#!/bin/bash
IMAGES=("nginx:alpine" "redis:7.2" "myapp:prod")
BACKUP_DIR="/backup/docker-images"
DATE=$(date +%Y%m%d-%H%M)
mkdir -p "$BACKUP_DIR"
for img in "${IMAGES[@]}"; do
# 清理镜像名中的非法字符(如冒号、斜杠)
safe_name=$(echo "$img" | sed 's/[:\/]/-/g')
docker save "$img" | gzip -c > "$BACKUP_DIR/${safe_name}-${DATE}.tar.gz"
done
执行前记得加执行权限:chmod +x backup-images.sh,然后运行即可生成带时间戳的压缩包。
配合 cron 实现定时自动备份
编辑定时任务:crontab -e,添加一行(例如每天凌晨 2 点执行):
0 2 * * * /path/to/backup-images.sh >> /var/log/docker-backup.log 2>&1
建议加上日志重定向,方便排查失败原因(比如镜像不存在、磁盘满、权限不足)。
补充建议:
- 在脚本开头加入 set -e,遇到错误立即退出
- 使用 docker image ls -q $img 先校验镜像是否存在,避免静默失败
- 备份前用 df -h $BACKUP_DIR 检查剩余空间,低于阈值则跳过或告警
自动清理过期备份(保留最近 7 天)
在脚本末尾追加清理逻辑:
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
或者更稳妥地先列出再删除:
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -print -delete
这样能兼顾可审计性和磁盘空间管理。若需按数量保留(如只留最近 10 个),可用 ls -t | tail -n +11 | xargs rm 方式。

















