#!/bin/bash # ============================================ # AIOT Platform - 清理脚本 # 清理旧镜像和容器,释放存储空间 # ============================================ set -e # 颜色输出 GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_info "=========================================" log_info "AIOT Platform 清理开始" log_info "=========================================" # 显示当前磁盘使用情况 log_info "当前磁盘使用情况:" df -h | grep -E "Filesystem|/$" echo "" log_info "当前 Docker 磁盘使用:" docker system df echo "" # 清理停止的容器 log_info "清理停止的容器..." docker container prune -f # 清理悬空镜像 log_info "清理悬空镜像..." docker image prune -f # 清理旧版本镜像(保留最近 3 个版本) log_info "清理旧版本镜像(保留最近 3 个版本)..." SERVICES="viewsh-gateway viewsh-module-system-server viewsh-module-infra-server viewsh-module-iot-server viewsh-module-iot-gateway viewsh-module-ops-server" for service in $SERVICES; do log_info "处理服务: ${service}" # 获取所有镜像,按时间排序,删除除了最新 3 个之外的所有镜像 docker images "localhost:5000/${service}" --format "{{.ID}} {{.Tag}}" | \ grep -v "latest" | \ tail -n +4 | \ awk '{print $1}' | \ xargs -r docker rmi -f 2>/dev/null || true done # 清理未使用的卷(谨慎使用) log_warn "是否清理未使用的卷? (y/N)" read -r response if [ "$response" = "y" ] || [ "$response" = "Y" ]; then log_info "清理未使用的卷..." docker volume prune -f fi # 清理构建缓存 log_info "清理 Docker 构建缓存..." docker builder prune -f --filter "until=24h" # 显示清理后的磁盘使用情况 echo "" log_info "=========================================" log_info "清理完成" log_info "=========================================" echo "" log_info "清理后磁盘使用情况:" df -h | grep -E "Filesystem|/$" echo "" log_info "清理后 Docker 磁盘使用:" docker system df