尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

清理docker磁盘使用空间

清理docker磁盘使用空间
📅 发布时间:2026/6/18 8:04:57
点击查看代码
#!/bin/bash
# Docker 清理工具(支持单独清理日志或全流程清理)
# 用法:
#   ./script.sh          # 执行全流程清理(系统资源+日志+数据卷)
#   ./script.sh --logs   # 仅执行容器日志清理#######################################
# 可配置参数(根据需求修改)
#######################################
LOG_SIZE_THRESHOLD="+1G"   # 日志大小阈值(如 +500M、+1G)
LOG_AGE_THRESHOLD="+7"     # 日志时间阈值(如 +7 表示7天前,单位:天)
KEEP_RUNNING_LOGS=0        # 是否保留运行中容器的日志(1=保留,0=清理)
KEEP_STOPPED_LOGS=0        # 是否保留已停止容器的日志(1=保留,0=清理)
######################################## 彩色输出配置
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # 重置颜色# 错误处理函数
error_handler() {echo -e "${RED}[错误] 步骤 $1 执行失败${NC}"
}# 检查 Docker 环境是否可用
check_docker_env() {echo -e "\n=== 检查 Docker 环境 ==="if ! command -v docker &> /dev/null; thenecho -e "${RED}[错误] 未安装 Docker,请先安装 Docker${NC}"exit 1fiif ! docker info &> /dev/null; thenecho -e "${RED}[错误] Docker 服务未运行,请启动 Docker 服务${NC}"exit 1fiecho -e "${GREEN}✅ Docker 环境正常${NC}"
}# 独立函数:清理容器日志
clean_container_logs() {echo -e "\n=== 容器日志清理 ==="local LOG_PATH="/var/lib/docker/containers"# 检查日志目录是否存在if [ ! -d "$LOG_PATH" ]; thenecho -e "${YELLOW}⚠️ 容器日志目录 $LOG_PATH 不存在,跳过日志清理${NC}"return 0fi# 1. 获取符合条件的容器ID(根据是否保留运行中/停止容器日志筛选)local TARGET_CONTAINERS=""if [ $KEEP_RUNNING_LOGS -eq 0 ] && [ $KEEP_STOPPED_LOGS -eq 0 ]; then# 清理所有容器的日志(运行中+已停止)TARGET_CONTAINERS=$(docker ps -aq)  # 所有容器IDelif [ $KEEP_RUNNING_LOGS -eq 0 ] && [ $KEEP_STOPPED_LOGS -eq 1 ]; then# 只清理运行中容器的日志TARGET_CONTAINERS=$(docker ps --format "{{.ID}}")  # 运行中容器IDelif [ $KEEP_RUNNING_LOGS -eq 1 ] && [ $KEEP_STOPPED_LOGS -eq 0 ]; then# 只清理已停止容器的日志TARGET_CONTAINERS=$(docker ps -aq --filter "status=exited")  # 已停止容器IDelseecho -e "${YELLOW}⚠️ 配置不允许同时保留运行中+已停止容器的日志,跳过清理${NC}"return 0fi# 2. 筛选符合大小+时间条件的日志文件if [ -z "$TARGET_CONTAINERS" ]; thenecho -e "${GREEN}✅ 没有符合条件的容器日志需要清理${NC}"return 0fi# 转换容器ID为正则表达式(用于匹配日志文件)local CONTAINER_REGEX=$(echo "$TARGET_CONTAINERS" | tr '\n' '|' | sed 's/|$//')local LOG_FILES=$(find "$LOG_PATH" \-type f \-name '*-json.log' \-size "$LOG_SIZE_THRESHOLD" \-mtime "$LOG_AGE_THRESHOLD" \| grep -E "$CONTAINER_REGEX")# 3. 显示待清理的日志文件并确认if [ -z "$LOG_FILES" ]; thenecho -e "${GREEN}✅ 没有超过 ${LOG_SIZE_THRESHOLD} 且存在 ${LOG_AGE_THRESHOLD} 天以上的日志文件${NC}"return 0fiecho -e "${YELLOW}即将清理以下日志文件(大小>${LOG_SIZE_THRESHOLD} 且 存在>${LOG_AGE_THRESHOLD}天):${NC}"echo "$LOG_FILES" | while read -r logfile; do# 显示日志文件大小和路径du -sh "$logfile" | awk '{print "  - " $1 "\t" $2}'doneread -p "确认清理以上日志文件?[y/N] " confirmif [[ "$confirm" != "y" && "$confirm" != "Y" ]]; thenecho -e "${YELLOW}⚠️ 已取消日志清理${NC}"return 0fi# 4. 执行清理(清空文件内容,保留文件)echo "开始清理..."echo "$LOG_FILES" | while read -r logfile; dotruncate -s 0 "$logfile" && echo "  已清空:$logfile"doneecho -e "${GREEN}✅ 容器日志清理完成${NC}"
}# 清理 Docker 系统资源(镜像、容器、构建缓存)
clean_system_resources() {echo -e "\n=== 清理 Docker 系统资源 ==="echo "清理未使用的镜像、容器、网络..."if ! docker system prune -a -f; thenerror_handler "系统资源清理"elseecho -e "${GREEN}✅ 系统资源清理完成${NC}"fiecho "清理构建缓存..."if ! docker builder prune -a -f; thenerror_handler "构建缓存清理"elseecho -e "${GREEN}✅ 构建缓存清理完成${NC}"fi
}# 清理未使用的数据卷
clean_volumes() {echo -e "\n=== 清理未使用的数据卷 ==="echo "清理无关联容器的数据卷..."if ! docker volume prune -f; thenerror_handler "数据卷清理"elseecho -e "${GREEN}✅ 数据卷清理完成${NC}"fi
}# 显示清理后资源使用情况
show_usage() {echo -e "\n=== 清理后 Docker 资源使用情况 ==="docker system df
}#######################################
# 主程序入口
#######################################
main() {check_docker_env# 根据参数选择执行模式if [ "$1" = "--logs" ]; thenecho -e "${YELLOW}>>> 执行模式:仅清理容器日志${NC}"clean_container_logselseecho -e "${YELLOW}>>> 执行模式:全流程清理(系统资源+日志+数据卷)${NC}"# 全流程执行前确认echo -e "\n${YELLOW}注意:将清理未使用的镜像、容器、缓存、数据卷及符合条件的日志${NC}"read -p "是否继续执行全流程清理?[y/N] " confirmif [[ "$confirm" != "y" && "$confirm" != "Y" ]]; thenecho "已取消执行"exit 0ficlean_system_resourcesclean_container_logsclean_volumesshow_usagefiecho -e "\n${GREEN}🎉 操作完成${NC}"
}# 启动主程序
main "$@"

使用方法:
全流程清理(默认):清理系统资源 + 日志 + 数据卷

点击查看代码
bash script.sh
**仅清理容器日志(单独执行日志清理功能):**
点击查看代码
bash script.sh --logs
**执行结果**
点击查看代码
=== 检查 Docker 环境 ===
✅ Docker 环境正常
>>> 执行模式:全流程清理(系统资源+日志+数据卷)注意:将清理未使用的镜像、容器、缓存、数据卷及符合条件的日志
是否继续执行全流程清理?[y/N] n  
已取消执行
[root@k8s-master233 ~]# vim 45.sh 
[root@k8s-master233 ~]# bash 45.sh === 检查 Docker 环境 ===
✅ Docker 环境正常
>>> 执行模式:全流程清理(系统资源+日志+数据卷)注意:将清理未使用的镜像、容器、缓存、数据卷及符合条件的日志
是否继续执行全流程清理?[y/N] y=== 清理 Docker 系统资源 ===
清理未使用的镜像、容器、网络...
Total reclaimed space: 0B
✅ 系统资源清理完成
清理构建缓存...
Total reclaimed space: 0B
✅ 构建缓存清理完成=== 容器日志清理 ===
✅ 没有符合条件的容器日志需要清理=== 清理未使用的数据卷 ===
清理无关联容器的数据卷...
Total reclaimed space: 0B
✅ 数据卷清理完成=== 清理后 Docker 资源使用情况 ===
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          4         4         247.5MB   3.88MB (1%)
Containers      7         7         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B🎉 操作完成

相关新闻

  • 微信小程序办公用品领用管理系统:小微企业高效管理新选择
  • CF1167F Scalar Queries
  • 2025 年 11 月 DALI 调光系统厂家推荐排行榜,调光网关,调光开关,调光电源,调光驱动,调光传感器,调光模块,调光控制系统公司推荐

最新新闻

  • 10分钟永久保存微信聊天记录:留痕工具完全指南
  • 2026年半导体设备展与材料展怎么选?五家展会制造端资源密度实地考察报告 - 深度智识库
  • Maupassant Hugo主题国际化支持:多语言博客搭建完整教程
  • GitHub Desktop汉化终极指南:3分钟打造中文版Git客户端
  • 2026年临汾全屋整装与毛坯房装修公司排行:5大品牌深度横评 - 精选优质企业推荐官
  • MuleSoft企业级AI编排实战:打通数据孤岛与大模型的中枢架构

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号