easyai/clean.sh
2025-08-19 10:07:22 +08:00

60 lines
2.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
echo "🚀 Starting Docker cleanup script..."
# 1. 清理已停止的容器
echo "➡️ Step 1: Removing all stopped containers..."
# -f: 强制删除
# docker ps -a -q: 列出所有容器包括已停止的并只显示ID
docker container prune -f
echo "✅ Done. Stopped containers have been removed."
# 2. 清理未使用的网络
echo "➡️ Step 2: Removing unused networks..."
docker network prune -f
echo "✅ Done. Unused networks have been removed."
# 3. 清理所有未使用的镜像
echo "➡️ Step 3: Removing all unused images..."
# docker image prune -a: -a 参数会删除所有未被任何容器引用的镜像,包括有标签的。
docker image prune -a -f
echo "✅ Done. All unused images have been removed."
# 4. 清理所有未使用的卷
echo "➡️ Step 4: Removing unused volumes..."
# 警告:卷通常用于持久化数据,请确保其中的数据不再需要。
docker volume prune -f
echo "✅ Done. Unused volumes have been removed."
# 5. 清理 Docker 构建缓存
echo "➡️ Step 5: Cleaning up Docker build cache..."
docker builder prune -f
echo "✅ Done. Build cache has been cleared."
# 6. 一键式清理,以防有遗漏
echo "➡️ Step 6: Running a final system-wide prune for good measure..."
docker system prune -a -f
echo "✅ Done. The final system prune is complete."
# 检查是否以 root 权限运行
if [ "$EUID" -ne 0 ]; then
echo "⚠️ This script requires root privileges. Please run with 'sudo'."
exit 1
fi
echo "➡️ Truncating log files for all containers..."
# 使用 docker inspect 命令获取日志文件的完整路径
for container_id in $(docker ps -aq); do
log_path=$(docker inspect --format='{{.LogPath}}' "$container_id")
if [ -f "$log_path" ]; then
log_size=$(du -sh "$log_path" | cut -f1)
if [ "$log_size" != "0" ]; then
echo " - Cleaning log file for container ID: $container_id (Size: $log_size)"
truncate -s 0 "$log_path"
fi
fi
done
echo "🎉 Docker cleanup finished! Checking disk usage again..."
df -h /var/lib/docker