docker定时自动备份镜像脚本

本文介绍如何使用bash脚本定期备份Docker容器,包括获取容器ID和名字,创建备份目录,清理旧备份,并记录操作日志。通过crontab设置定时任务,确保容器数据的持续保护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/bash

log="/var/log/docker_backup.log"

declare docker_id=(`docker ps -a | awk '{print $1}'| grep -v "CONTAINER"`) #声明所有docker容器的id

declare docker_name=(`docker ps -a | awk '{print $2}' | awk -F/ '{print $NF}'| grep -v "ID" `)  #声明所有docker容器的名字

if [ ! -d "~/docker_backup" ];then  #判断存放备份文件的文件夹

mkdir -p ~/docker_backup

fi

for i in ${!docker_id[@]}  

do

rm -f ~/docker_backup/${docker_name[i]}_$(date -d -20day +%Y-%m-%d).tar #删除前20天的备份

docker save -o ~/docker_backup/${docker_name[i]}_$(date "+%Y-%m-%d").tar ${docker_id[i]}

if [ $? -eq 0 ];then  #如果成功备份写入log的日志

echo -e "$(date "+%Y-%m-%d %H:%M:%S") ${docker_name[i]} is finishing backup " >> ${log}

echo ""

else

echo -e "$(date "+%Y-%m-%d %H:%M:%S") ${docker_name[i]} is failure to backup ">> ${log}

fi

done

 

crontab -e

0 10 * * * sh ~/docker_backup.sh

Docker 并不会默认自动删除镜像。如果你遇到 Docker 镜像总是被删除的情况,可能是由于以下几个原因: ### 1. **手动触发了清理命令** 可能是你或系统中的某个脚本无意中运行了 `docker system prune` 或者 `docker image prune` 等命令。这些命令会清理未使用的镜像、容器、网络等资源。 - `docker system prune`: 清理所有停止的容器、未使用的网络以及悬空镜像(即没有标签且未被任何容器引用的镜像)。 - `docker image prune`: 清理悬空镜像。 如果你定期运行这些命令,并且没有指定 `-a` 参数,那么只有悬空镜像会被删除;如果指定了 `-a`,则所有未被使用的镜像都会被删除。 ### 2. **磁盘空间不足** 当主机磁盘空间不足时,某些自动化工具可能会配置为定期清理 Docker 资源以释放空间。你可以检查系统的日志文件,查看是否有类似的操作记录。 ### 3. **CI/CD 流水线或其他自动化任务** 如果你在使用 CI/CD 工具(如 Jenkins、GitLab CI),可能存在一些自动化任务会在构建完成后清理旧的镜像,以保持环境整洁并节省存储空间。 ### 解决方案: - 检查是否有关于清理 Docker定时任务或脚本。 - 查看系统日志 (`journalctl`, `/var/log/syslog`) 和 Docker 日志 (`docker logs <container_id>`) 来排查是否存在异常操作。 - 使用 `df -h` 检查磁盘使用情况,确认是否有因磁盘空间不足而触发的清理机制。 - 审核 CI/CD 配置文件和其他自动化流程,确保它们的行为符合预期。 为了防止误删重要镜像,建议给常用镜像打上永久标签(tag),并在需要时备份重要的自定义镜像
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值