jenkins-data-20260525-abctmptestci-build-docker volume inspectCreatedAtredis-datapostgres-volumedocker volume prune -fci-tmpdocker volume rm#!/bin/bash
# /usr/local/bin/docker-volume-cleanup.sh
THRESHOLD_HOURS=168 # 7天
EXCLUDE_PATTERNS=("redis-data" "postgres-volume" "nexus-data")
获取所有卷名列表
VOLS=$(docker volume ls -q 2>/dev/null)
Docker Desktop(windows)
当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。
下载
for vol in $VOLS; do
跳过排除列表中的卷
skip=false
for pattern in "${EXCLUDE_PATTERNS[@]}"; do
if [[ "$vol" == "$pattern" ]]; then
skip=true
break
fi
done
[[ "$skip" == true ]] && continue
检查是否被容器引用
if docker ps -a --format '{{.Names}}' | grep -q "$vol"; then
continue
fi
检查创建时间(需 Docker 20.10+ 支持 CreatedAt 字段)
created_at=$(docker volume inspect "$vol" 2>/dev/null | jq -r '.[0].CreatedAt' 2>/dev/null)
if [[ -n "$created_at" ]]; then
created_ts=$(date -d "$created_at" +%s 2>/dev/null)
now_ts=$(date +%s)
age_hours=$(( (now_ts - created_ts) / 3600 ))
if [[ $age_hours -gt $THRESHOLD_HOURS ]] && [[ "$vol" =~ ^(ci-|tmp|test-|build-) ]]; then
echo "$(date): [TO CLEAN] Volume '$vol' ($age_hours hrs old)" | logger -t docker-volume
docker volume rm "$vol" 2>/dev/null && echo "✓ Removed $vol"
fi
fi
done
crontab30 1 * * * /usr/local/bin/docker-volume-cleanup.sh >> /var/log/docker-volume-cleanup.log 2>&1du -sh /var/lib/docker/volumes/$vol/_datadf -h /var/lib/dockerdocker volume prune -fdocker volume rm ${VOLUME_NAME}docker system df -vRECLAIMABLE