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=1
du -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
:对筛选出的普通文件进行行数统计,即文件的数量。
热门推荐
中国十大传统特色糖果,你吃过哪些?
浙江安吉:青年“唤醒”青山
浙江安吉探索乡村美丽庭院建设——扮靓乡村小院 创造幸福生活
浙江安吉实施乡村振兴新青年行动 让农民受益 让青春无悔
电动牙刷选购指南:优缺点分析与选购技巧
探访丨北京3条地铁年内通车开始“跑图”,高颜值车站抢先看
第四套人民币100元纸币,你家可能藏着个“小金库”
84消毒液洗床单正确使用方法
家庭消毒怎么做 日常消毒方式有哪几种
KSHMR:电子舞曲中的印度风情
清华食堂如何满足各地学生的味蕾?
清华食堂美食大揭秘:吃货必打卡!
元旦打卡:成都亲子游必去三大圣地
成都亲子游:4天3晚玩转三星堆、都江堰和杜甫草堂
跟着阿慧玩转成都4天亲子游
周末打卡:四川科技馆&海昌极地海洋公园
成都亲子游必打卡:从文化到科技的全方位体验
冯巩辽宁春晚经典台词:勾起无数回忆
保姆级甲鱼烧鸡来了,好好学吧,那可是饭店里响当当的霸王别姬呀
冬季海岛旅游挑选指南
全球绝美海岛旅游攻略与景点推荐
如何定期维护保养您的电脑?
“村晚”里的中国年:从田间地头到文化舞台
江苏宿迁、四川华蓥市和湖北黄梅:三地春节特色活动精彩纷呈
兔年春节创意文案大集合!
寒假逆袭!九年级数学高效学习法
寒假数学作业辅导秘籍:家长必看!
人教版九年级数学寒假作业:科学思维养成秘籍
九年级数学寒假学习指南:解题技巧与复习策略
景德镇必打卡:乐天陶社&御窑博物馆