参考文章:
Docker容器日志查看与清理(亲测有效)
Docker - 清理Docker占用的磁盘空间

一、清理前台日志

也就是容器stdout标准输出的日志,通过docker logs -f 容器名可以查看的日志。
默认会保存到/var/lib/docker/containers/容器ID/容器ID-json.log
通过如下命令可以查看所有容器日志的大小

logs=$(find /var/lib/docker/containers/ -name *-json.log)  

for log in $logs  
        do  
             ls -lh $log   
        done  

在这里插入图片描述

方法一:定时去清理日志文件

vim clear_docker_log.sh

#!/bin/sh
# vim:sw=4:ts=4:et
<<INFO
AUTHOR:运维@小兵
DATE:2021-10-21
DESCRIBE:清理容器日志
SYSTEM:CentOS 7.6.1810
WARNING:警告信息
MODIFY:
INFO

set -e

DOCKER_STORAGE_PATH="/var/lib/docker"

echo "INFO:======== start clean docker containers logs ========"

logs_file=$(find ${DOCKER_STORAGE_PATH}/containers/ -name *-json.log)  #容器日志文件

for log_name in ${logs_file}
do
    echo "INFO:clean logs : ${log_name}"
    > ${log_name}
done

echo "INFO:======== end clean docker containers logs ========"

方法二:设置docker日志保留策略

vim /etc/docker/daemon.json

{
   "log-driver": "json-file",
   "log-opts": {
        "max-size": "50m",		#日志文件大小不超过50M
        "max-file":"3"			#最多保留3个日志文件
   }
}

解释:

"max-size": "50m"		#日志文件大小不超过50M
"max-file":"3"			#最多保留3个日志文件

systemctl restart docker

查看容器日志策略:

docker inspect -f '{{.HostConfig.LogConfig}}' 容器名

二、清理后台日志

也就是应用程序自身产生的日志。

docker inspect a3ffabed23a0 | grep ‘“MergedDir”:’
在这里插入图片描述
这个路径对应了容器里面的根路径
在这里插入图片描述
在这里插入图片描述
这里面的数据只有在容器重建之后才会清除,如果日志文件没有定时处理,也没有落盘,容器也没有重建,那么日志会越来越大,极大占用磁盘空间。
如果是k8s集群,会导致node节点有磁盘压力,从而导致上面的pod被Evicted (驱逐)
在这里插入图片描述

方法一:日志落盘

可以挂载网络存储做持久化

方法二:日志切割、转储

可以通过shell脚本或者logrotate工具
logrotate实现日志切割(转储)

方法三:应用日志不写入到日志文件log.out,只输出到标准输出

把启动日志放入后台,读取target下面的日志输出到stdout

java -Xbootclasspath/a:./config/ $JAVA_OPT -jar app.jar --server.port=${SERVICE_PORT} > /dev/null 2>&1 &
sleep 5
tail -f ${WORKDIR}/target/logs/*.log
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐