Docker容器日志导致磁盘占满?这份定时清理方案请收好!
创作时间:
作者:
@小白创作中心
Docker容器日志导致磁盘占满?这份定时清理方案请收好!
引用
CSDN
1.
https://m.blog.csdn.net/m0_53589360/article/details/145699151
在使用Docker时,容器日志的积累可能会导致服务器磁盘空间被占满。本文将介绍如何定位磁盘占用问题,并提供一个定时清理Docker容器日志的脚本方案,帮助你有效管理磁盘空间。
问题定位
要解决磁盘空间被占满的问题,首先需要定位是哪个目录占用了大量空间。以下是具体步骤:
查看磁盘使用情况:
df -h使用以下命令依次递归找出磁盘占用最高的目录:
- 切换到Docker数据目录:
cd /var/lib/docker/ - 统计当前目录文件磁盘占用率:
或者du -h --max-depth=1du -sh * | sort -nr
解决方案
为了解决Docker容器日志占用磁盘空间的问题,可以编写一个定时日志清理脚本。该脚本将Docker容器产生的日志先复制到临时目录保存,超过七天则自动删除,然后清空Docker容器原文件的内容。
以下是具体的Shell脚本内容:
#!/bin/bash
# 功能:定时清除docker容器日志
# 1.现将日志文件移动到临时日志文件夹
# 2.当临时日志文件夹日志超过七天则自动清除
# 3.将每天执行的计划记录到脚本执行日志
echo "======== start clean docker containers logs ========" >> "exec_log_file"
# 定义变量
docker_logs_dir="/var/lib/docker/containers/"
target_dir="/home/hvpc/logs/docker-log/"
max_days=1
exec_log_file="/home/hvpc/logs/docker-log/docker-logs-clean-execution.log"
script_path=/home/script/docker-logs-clean.sh
# 记录脚本执行时间
echo "Script execution log - $(date)" >> "$exec_log_file"
# 找出并处理日志文件
find "$docker_logs_dir" -name '*-json.log' |
while IFS= read -r log_file; do
echo "Found log file: $log_file"
# 获取文件名
filename=$(basename "$log_file")
# 复制日志文件到暂存目录
cp "$log_file" "$target_dir$filename"
echo "Log file moved to temporary storage: $target_dir" >> "$exec_log_file"
# 清空原始文件内容
truncate -s 0 "$log_file"
echo "Original log file $log_file content cleared" >> "$log_file"
done
# 查找暂存目录下超过7天的日志文件
old_logs=$(find "$target_dir" -name '*-json.log' -type f -mtime +$max_days)
if [ -n "$old_logs" ]; then
# 如果找到符合条件的日志文件,删除它们
echo "找到超过 $max_days 天的日志文件:"
echo "$old_logs"
echo "正在删除..."
find "$target_dir" -type f -mtime +$max_days -exec rm -f {} \;
echo "已删除超过 $max_days 天的日志文件:$old_logs" >> "$exec_log_file"
else
# 如果未找到符合条件的日志文件,显示提示信息
echo "未找到超过 $max_days 天的日志文件" >> "$exec_log_file"
fi
# 检查是否已经存在定时任务
if ! crontab -l | grep -q "$script_path"; then
# 如果不存在,添加定时任务
echo "添加定时任务..."
echo "0 3 * * * /bin/bash $script_path" | crontab -
echo "已添加定时任务"
fi
# 写入脚本执行结束信息
echo "Script execution completed" >> "$exec_log_file"
拓展命令
为了更好地管理和查看日志文件,以下是一些常用的Linux命令示例:
将脚本上传至目录:
cd /etc/cron/设置脚本执行权限:
chmod 777 docker-logs-clean.sh修改crontab:
crontab -e加入定时计划:
0 2 */1 * * sh /root/clean_docker_log.sh查看定时计划是否生效:
crontab -l日志搜索:
grep "error" logfile.log动态日志搜索:
tail -f logfile.log | grep "error"在某个目录下的文件中搜索:
grep -r "error" /path/to/directory查找文件:
find /path/to/search -name "*.txt" -type f # 查找所有扩展名为 .txt 的文件
-name:指定文件名-type:指定文件类型,f代表文件,d代表目录-size:指定文件大小-perm:指定文件权限
- 查找文件夹下面的文件个数:
ls -l | grep "^-" | wc -l
ls -l:列出当前目录下的所有文件和详细信息。grep "^-":筛选出普通文件(不包括目录和其他特殊类型的文件)。wc -l:对筛选出的普通文件进行行数统计,即文件的数量。
热门推荐
怎么用excel导进广联达
六神丸乱用会有哪些危害?
《金刚经》妙行无住分第四:布施不住六尘,福德喻如虚空
尿常规检查发现细菌?可能是尿路感染!
出发自驾张家界:保姆级深度游张家界的路线规划与景点推荐
高位下拉:不同的握距、握法、上身直立还是后仰?
汽车车内异响问题怎样解决?解决后如何防止再次出现?
51单片机快速入门教程——51核心开发板(STC89C52RC)
如何有效清理手机缓存与垃圾文件?实用技巧大集合!
QEMU虚拟机退出全屏模式的四种方法
你有注意看孩子的角膜曲率吗?没想到它这么重要!
过程工程所在纳米颗粒佐剂通用流感疫苗研究上取得新进展
千年古镇的新年新韵
儿童文学中的诗意与哲思——写在《金波别集》出版之际
在香港VPS上配置高效防火墙的最佳实践
封闭的鞋柜如何透气,打造健康家居环境
个人信用贷款必看十条避坑指南
卷积神经网络(CNN):原理与实践
脾气很差怎么办?全方位情绪管理指南
最新:2025年每月上班天数公式
AI大模型基础入门:从概念到应用的全面解析
从一条街到一个城,他用3000多篇文章记录义乌小商品市场的变迁
计算机研究生:开启你的科技人生,未来掌握在你手中
德股、欧股2025年“势不可挡”,市场的乐观情绪还能维持多久?
用于饲料应用的单细胞蛋白质生产
机器学习新手如何应对数据集不平衡的情况
孩子叛逆的原因及解决方法?专家老师帮你全面分析
如何发现市场的热点话题
同济大学土木工程学科改革:以人工智能驱动传统学科创新
你知道吗?现在看似天经地义的双休制度,其实花了整整40年才落实