文章目录
1. 通过daemon.json全域设置,日志文件大小
1.1 新建或打开/etc/docker/daemon.json文件
vi /etc/docker/daemon.json
{
"log-driver":"json-file", #设置日志文件格式
"log-opts": {"max-size":"20m", "max-file":"3"} #设置最大20m,每个最多3个
}
- max-size=20m,设置容器日志大小上限是20M,
- max-file=3,设置容器有三个日志,分别是:id+json、id+1.json、id+2.json
1.2 重启docker:
systemctl daemon-reload
systemctl restart docker.service
1.3 注意:
这种方式只对新建的容器有效,已经建过的需要重建。
2. 使用shell脚本定时清理日志
2.1 清理 /dockerimage/containers/ 中 *-json.log
##########################################################
## 每天01:30自动执行脚本
#30 01 * * * /root/clear_containers
## 建存放日志的文件
#vi clear.log
#chmod 755 clear.log
##########################################################
#!/bin/sh
echo "======== 清理容器日志文件超过1G的文件 ========"
#需要设置好docker的路径 【/home/dockerimage/containers】
logs=$(find /home/dockerimage/containers/ -name *-json.log)
time=$(date "+%Y-%m-%d %H:%M:%S")
# 创建日志文件变量,用于记录执行日志
FILE=/root/clear.log
echo $time>>${FILE}
# 清理/home/efuture/dockerimage/containers日志
for log in $logs
do
#ls -lh $log
FILE_SIZE=`ls -l $log | awk '{print $5}'`
echo $FILE_SIZE
#1G = 1073741824 字节
#2G=2×1024×1024×1024=2147483648B(字节)
if [ $FILE_SIZE -ge 1073741824 ]
then
echo "清理超过1G文件 $log"
echo "清理超过1G文件 $log">>${FILE}
cat /dev/null > $log
if [ $? -eq 0 ]; then
echo "success">>${FILE}
else
echo "fail">>${FILE}
fi
fi
done
echo "-----------------------------------任务结束-----------------------------------">>${FILE}
2.2 清理 /home/dockerimage/overlay2中log.log
##########################################################
## 每天01:30自动执行脚本
#30 01 * * * /root/clear_overlay2.sh
## 建存放日志的文件
#vi clear.log
#chmod 755 clear.log
##########################################################
#!/bin/sh
echo "======== 清理容器日志文件超过100M的文件 ========"
#需要设置好docker的路径 【/home/dockerimage/overlay2】
logs=$(find /home/dockerimage/overlay2/ -maxdepth 4 -type f -size +100M -name log.log | grep 'merged')
time=$(date "+%Y-%m-%d %H:%M:%S")
# 创建日志文件变量,用于记录执行日志
FILE=/root/clear.log
echo $time>>${FILE}
# 清理/home/efuture/dockerimage/overlay2日志
for log in $logs
do
#ls -lh $log
FILE_SIZE=`ls -l $log | awk '{print $5}'`
echo $FILE_SIZE
#1G = 1073741824 字节
#2G=2×1024×1024×1024=2147483648B(字节)
if [ $FILE_SIZE -ge 104857600 ]
then
echo "清理超过100M文件 $log"
echo "清理超过100M文件 $log">>${FILE}
cat /dev/null > $log
if [ $? -eq 0 ]; then
echo "success">>${FILE}
else
echo "fail">>${FILE}
fi
fi
done
echo "-----------------------------------任务结束-----------------------------------">>${FILE}
2.3 配置定时任务
[root@llz-ds01 ~]# crontab -e
# 定时清理docker日志
30 01 * * * /root/clear_containers.sh
40 01 * * * /root/clear_overlay2.sh