用 cron 定时执行 docker save 可自动导出镜像,需确保镜像名、绝对路径、写权限正确,通过封装脚本实现带时间戳导出、日志记录与错误处理,并配置 root crontab 定时运行,建议附加 find 清理7天前备份。

用 cron 定时执行 docker save 即可实现自动导出镜像,关键在于路径、权限和错误处理要到位。
确认镜像与导出路径
先明确你要导出的镜像(可用名称或 ID),并确保目标目录存在且有写入权限:
- 查看镜像:
docker images,记下如nginx:latest或abc123456789 - 创建导出目录(推荐绝对路径):
mkdir -p /backup/docker-images - 验证当前用户对目录有写权限(避免 cron 以 root 运行却无权写入)
编写导出脚本(推荐封装)
把导出逻辑写成可复用的 shell 脚本,便于调试和 cron 调用:
- 新建脚本:
vim /opt/scripts/export-docker-image.sh - 内容示例(带时间戳和简单日志):
#!/bin/bash
# 导出指定镜像,并按日期命名
IMAGE_NAME="nginx:latest"
BACKUP_DIR="/backup/docker-images"
TIMESTAMP=$(date +\%Y\%m\%d_\%H\%M)
FILE="${BACKUP_DIR}/nginx_latest_${TIMESTAMP}.tar"
<h1>确保目录存在</h1><p>mkdir -p "$BACKUP_DIR"</p><h1>执行导出,失败时记录日志</h1><p>if docker save -o "$FILE" "$IMAGE_NAME"; then
echo "$(date): $IMAGE_NAME exported to $FILE" >> /var/log/docker-export.log
else
echo "$(date): ERROR exporting $IMAGE_NAME" >> /var/log/docker-export.log
fi</p>- 赋予执行权限:
chmod +x /opt/scripts/export-docker-image.sh
配置定时任务(cron)
编辑 root 的 crontab(因 docker 命令通常需 root 权限):
- 运行:
sudo crontab -e - 添加一行(例如每天凌晨 2 点执行):
0 2 * * * /opt/scripts/export-docker-image.sh
- 保存退出。系统会自动加载新规则
- 可手动测试:
sudo /opt/scripts/export-docker-image.sh,检查日志和文件是否生成
清理旧备份(可选但推荐)
避免磁盘占满,可在脚本末尾加清理逻辑:
- 例如保留最近 7 天的备份:
find "$BACKUP_DIR" -name "nginx_latest_*.tar" -mtime +7 -delete
- 或统一按镜像名+日期归档,方便追溯











