#!/bin/bash # 定义颜色 RED='\033[0;31m' GREEN='\033[0;32m' NC='\033[0m' # No Color # 检查是否以 root 或具有 docker 权限运行 if ! docker info >/dev/null 2>&1; then echo -e "${RED}错误:需要 Docker 权限。请以 root 或 docker 组用户运行此脚本${NC}" exit 1 fi # 记录开始时间 START_TIME=$(date +%s) echo -e "${GREEN}开始清理 Docker 环境...${NC}" # 函数:执行清理并显示结果 execute_cleanup() { local command="$1" local description="$2" echo -n "正在 $description..." local output=$($command 2>&1) if [ $? -eq 0 ]; then echo -e "${GREEN}完成${NC}" if [ ! -z "$output" ]; then echo "$output" | grep -i "total reclaimed" || echo "$output" fi else echo -e "${RED}失败${NC}" echo "错误信息: $output" fi } # 执行清理操作 execute_cleanup "docker system prune --all --force" "清理系统资源" execute_cleanup "docker builder prune --all --force" "清理构建缓存" execute_cleanup "docker buildx prune --all --force" "清理 buildx 缓存" # 清理 buildx_buildkit_ 开头的容器 echo -n "正在清理 buildx_buildkit_ 容器..." buildx_containers=$(docker ps -aq --filter "name=buildx_buildkit_") if [ ! -z "$buildx_containers" ]; then docker rm -f $buildx_containers >/dev/null 2>&1 if [ $? -eq 0 ]; then echo -e "${GREEN}完成${NC}" else echo -e "${RED}部分或全部容器删除失败${NC}" fi else echo -e "${GREEN}无 buildx_buildkit_ 容器需要清理${NC}" fi execute_cleanup "docker image prune --all --force" "清理镜像" execute_cleanup "docker network prune --force" "清理网络" # 处理卷清理 echo -n "正在清理未使用的卷..." dangling_volumes=$(docker volume ls --quiet --filter="dangling=true") if [ ! -z "$dangling_volumes" ]; then docker volume rm $dangling_volumes >/dev/null 2>&1 if [ $? -eq 0 ]; then echo -e "${GREEN}完成${NC}" else echo -e "${RED}部分或全部卷清理失败${NC}" fi else echo -e "${GREEN}无未使用卷需要清理${NC}" fi execute_cleanup "docker volume prune --all --force" "执行最终卷清理" # 计算执行时间 END_TIME=$(date +%s) EXECUTION_TIME=$((END_TIME - START_TIME)) echo -e "\n${GREEN}清理完成!总耗时:${EXECUTION_TIME}秒${NC}"