本文目录导读:

这里有几个自动清理 Docker build 缓存的脚本方案,根据你的使用场景选择:
基础清理脚本(最常用)
#!/bin/bash # docker-cleanup.sh echo "🔍 开始清理 Docker Build 缓存..." # 显示当前缓存大小(可选) echo "当前 build 缓存大小:" docker system df echo "🗑️ 清理 build 缓存..." # 清理所有未使用的 build 缓存 docker builder prune -a -f # 额外清理:移除所有未使用的容器、网络、镜像(慎用) # docker system prune -a -f echo "✅ 清理完成!" echo "" echo "清理后磁盘使用情况:" docker system df
保留最近 N 小时的缓存
#!/bin/bash
# docker-cleanup-recent.sh
# 保留最近24小时的缓存,清理更早的
HOURS=24
echo "🕐 清理 ${HOURS} 小时前的 build 缓存..."
# 清理超过指定时间的缓存
docker builder prune --filter "until=${HOURS}h" -f
echo "✅ 清理完成"
自动清理 + 日志记录
#!/bin/bash
# docker-cleanup-with-log.sh
LOG_FILE="/var/log/docker-cleanup.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "[${TIMESTAMP}] 开始清理 Docker build 缓存" | tee -a ${LOG_FILE}
# 记录清理前的状态
echo "清理前磁盘使用:" | tee -a ${LOG_FILE}
docker system df >> ${LOG_FILE}
# 执行清理
echo "正在清理..." | tee -a ${LOG_FILE}
docker builder prune -a -f >> ${LOG_FILE} 2>&1
# 记录清理后的状态
echo "清理后磁盘使用:" | tee -a ${LOG_FILE}
docker system df >> ${LOG_FILE}
echo "[${TIMESTAMP}] 清理完成" | tee -a ${LOG_FILE}
echo "----------------------------------------" >> ${LOG_FILE}
带参数的高级版本
#!/bin/bash
# docker-cleanup-advanced.sh
usage() {
echo "用法: $0 [选项]"
echo "选项:"
echo " -a, --all 清理所有 build 缓存"
echo " -d, --days N 清理 N 天前的缓存"
echo " -f, --force 强制清理(跳过确认)"
echo " -v, --verbose 显示详细信息"
exit 1
}
ALL=false
DAYS=""
FORCE=false
VERBOSE=false
while [[ $# -gt 0 ]]; do
case $1 in
-a|--all)
ALL=true
shift
;;
-d|--days)
DAYS="$2"
shift 2
;;
-f|--force)
FORCE=true
shift
;;
-v|--verbose)
VERBOSE=true
shift
;;
*)
usage
;;
esac
done
echo "🐳 Docker Build 缓存清理工具"
echo "================================"
if [ "$VERBOSE" = true ]; then
echo "当前 build 缓存状态:"
docker system df | head -n 10
echo ""
fi
if [ "$ALL" = true ]; then
echo "🗑️ 清理所有 build 缓存..."
if [ "$FORCE" = true ]; then
docker builder prune -a -f
else
docker builder prune -a
fi
elif [ -n "$DAYS" ]; then
echo "🗑️ 清理 ${DAYS} 天前的 build 缓存..."
docker builder prune --filter "until=${DAYS}d" -f
else
echo "🗑️ 清理未使用的 build 缓存..."
docker builder prune -f
fi
echo "✅ 清理完成"
定时任务脚本(配合 cron)
#!/bin/bash
# docker-cleanup-cron.sh
# 配合 cron 定时执行
# 每隔2小时清理一次过期的缓存
# 0 */2 * * * /path/to/docker-cleanup-cron.sh
MAX_CACHE_AGE=2 # 保留最近2小时的缓存
docker builder prune --filter "until=${MAX_CACHE_AGE}h" -f > /dev/null 2>&1
# 每周日凌晨3点清理所有缓存
if [ "$(date +%u)" -eq 7 ] && [ "$(date +%H)" -eq 3 ]; then
docker builder prune -a -f > /dev/null 2>&1
fi
使用方式
-
保存脚本:
nano docker-cleanup.sh -
添加执行权限:
chmod +x docker-cleanup.sh -
运行脚本:
# 基础清理 ./docker-cleanup.sh # 高级版本 ./docker-cleanup-advanced.sh -a -v ./docker-cleanup-advanced.sh -d 7
-
设置定时任务(可选):
crontab -e # 添加以下行:每天凌晨2点清理 0 2 * * * /path/to/docker-cleanup.sh
注意事项
- 谨慎使用
-a参数:会删除所有 build 缓存,包括正在使用的,下次构建时会重新下载依赖 - CI/CD 环境建议:保留至少最近几小时的缓存,加速构建
- 生产环境:使用带日志记录的版本,方便排查问题
选择哪个脚本取决于你的具体需求,建议从基础版本开始,逐步完善。