当前位置: 首页 > news >正文

清理docker磁盘使用空间

点击查看代码
#!/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🎉 操作完成
http://www.jsqmd.com/news/30152/

相关文章:

  • 2025年常温起皱风格水洗机供货商权威推荐榜单:棉麻起皱风格水洗机/棉起皱风格水洗机/麻起皱风格水洗机源头厂家精选
  • 。第二次作业
  • 2025年镀锌钢格板制造企业权威推荐榜单:平台钢格板/齿形钢格板/插接钢格板实力厂家精选
  • 【新品上市】华清远见AIoT实战平台-STM32F103ESP32-S3 AI开发板套件,玩转小智AI桌宠机器狗智能车等项目
  • Elasticsearch-head 安装
  • 2025 年钢板厂家最新推荐:优质企业榜单发布,覆盖中厚 / 镀锌 / 冷轧 / 高强度等类型,附协会权威测评与选择建议
  • 微信小程序办公用品领用管理系统:小微企业高效管理新选择
  • Unresolved reference ksp
  • CF1167F Scalar Queries
  • 2025 年 11 月商标注册服务商权威推荐榜:覆盖江苏商标注册,靖江商标注册,常州商标注册,镇江商标注册,丹阳商标注册的专业机构精选
  • 2025 年 11 月 DALI 调光系统厂家推荐排行榜,调光网关,调光开关,调光电源,调光驱动,调光传感器,调光模块,调光控制系统公司推荐
  • 2025年11月反应釜供厂家推荐榜:行业领先解决方案与排名分析
  • 2025 年连接器厂家最新推荐榜:实力制造商全面盘点,附中国电子元件行业协会权威测评数据与选型指南
  • PS 进化了!2026 版让“所想即所见”成为现实
  • 校管家小程序系统:教育培训行业的线上运营利器
  • AWS |ssh连接
  • 国产化Word处理控件Spire.Doc教程:如何使用 Java 将 TXT 文本转换为 Excel 表格
  • SMTP协议是什么意思?SMTP端口的作用?
  • 2025 年集装箱拖车公司最新推荐榜,技术实力与市场口碑深度解析及优质品牌综合评估
  • 2025年保温一体板厂家最新推荐:浙江乐邦节能,铝板保温一体板/钢板保温一体板/薄陶瓷保温一体板/薄陶瓷一体板/金属保温一体板/引领保温与装饰个性化新标准
  • 2025年杭州可以看运河的写字楼推荐,武林CBD商务办公全解析
  • 2025年美容床工厂权威推荐榜单:美容床价格/美容床批发/美容床公司源头厂家精选
  • NocoBase v1.9.0 正式版发布
  • PDF处理控件Aspose.PDF教程:在Python中向PDF文档添加页面
  • 2025年潜水搅拌机厂家推荐,潜水搅拌机制造企业全解析
  • 点阵液晶屏驱动 VK1024B段码驱动IC 3线串行接口 LCD驱动原厂
  • 2025年11月锅炉厂家权威推荐:锅炉行业优选指南与技术创新
  • DataMark - 数据集市分层
  • 电子表格转换为字符串 格式化字符串%4.2f 是什么意思
  • 20255年11月换热器厂家权威测评:创新热管理技术的先锋