1、Docker容器日志查看

Docker容器日志查看我们都知道用:docker logs -f 容器名/容器ID

在实际使用中我们往往会忽略容器日志存储的问题,直到某天服务器磁盘告警才去排查问题,非常影响生产效率,下面我们就讲下如何时查看容器日志位置,及清除方法。


2、Docker容器日志位置查找

Linux下默认容器日志位置在:/var/lib/docker/containers/目录中对应的容器ID目录下, 以json.log结尾的文件,查看所有容器日志位置及大小的脚本如下:

#!/bin/bash
echo "======== docker containers logs file list ========"  
logs=$(find /var/lib/docker/containers/ -name *-json.log)  
for log in $logs  
    do  
        ls -lh $log   
    done

注:如果对Docker工作目录有调整,请根据实际情况修改脚本中的find命令后的查找目录位置。下面的清除脚本也如此。


3、Docker容器日志清除及优化

清空Docker容器日志脚本:

#!/bin/bash
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
    do
        echo "clean logs : $log"
        echo "" > $log
    done

这样脚本执行一次会释放所有日志存储空间,但时间长了后日志依然会增长起来。你会说我们可以用定时任务crontab -e,将脚本加入的系统定时任务中由系统定时帮我们清理容器日志。这种方案虽然看起来很完美,但有点暴力,

而且如果需要查看定时任务执行时间点前的日志时就会很尴尬了。我们可以采取下面的方案——设置容器日志大小的方式来限制日志大小,这样会优雅了许多。脚本实现方法如下:

cat <<-ENDDOCKER > /etc/docker/daemon.json
{
    "log-opts": {
       "max-size": "20m",
       "max-file": "10"
    }
}
ENDDOCKER
systemctl daemon-reload
systemctl restart docker

关于日志文件大小及个数(max-size、max-file),你可以根据实际需要来调整。

如果你已使用了/etc/docker/daemon.json对Docker做过特殊配置,只需要把下面的内容添加到/etc/docker/daemon.json文件中,然后重启Docker服务即可。

    "log-opts": {
       "max-size": "20m",
       "max-file": "10"
    }