Docker 一个清理日志的Shell脚本

27 min read

以下是一个用于清理Docker日志的Shell脚本:

#!/bin/bash

#清除Docker容器日志的脚本

#设置日志保存时间为7天,可以根据实际需要自行修改
LOG_SAVE_TIME=7

#获取当前时间戳
CURRENT_TIME=$(date +%s)

#列出所有的容器
CONTAINERS=$(docker ps -a -q)

#遍历所有容器,对于每个容器清理日志
for container in ${CONTAINERS}
do
    #获取容器的日志路径
    LOG_PATH=$(docker inspect --format='{{.LogPath}}' $container)

    #如果日志路径不为空,则清理过期日志
    if [[ ! -z ${LOG_PATH} ]];
    then
        #获取日志文件最后修改时间
        LOG_LASTMOD=$(date +%s -r ${LOG_PATH})

        #计算日志保存时间
        LOG_AGE=$(( (${CURRENT_TIME} - ${LOG_LASTMOD}) / 60 / 60 / 24 ))

        #如果日志保存时间超过设置的时间,则进行清理
        if [[ ${LOG_AGE} -gt ${LOG_SAVE_TIME} ]];
        then
            echo "清理容器 ${container} 的日志文件 ${LOG_PATH}"
            cat /dev/null > ${LOG_PATH}
        fi
    fi
done

该脚本会遍历所有Docker容器,对于每个容器,检查其日志路径,如果日志保存时间超过设定的时间,则清空日志文件。在执行此脚本之前,您应该将 $ LOG_SAVE_TIME 设置为您希望保存日志的天数。