78 lines
2.3 KiB
Bash
78 lines
2.3 KiB
Bash
#!/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}" |