60 lines
2.1 KiB
Bash
60 lines
2.1 KiB
Bash
#!/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 |