docker 限制日志文件大小和数量

Posted pythonx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 限制日志文件大小和数量相关的知识,希望对你有一定的参考价值。

最近使用docker 发现一个可怕的问题,那就是创建容器后,会把磁盘空间占满,太可恶了。

经过查阅网站,发现这个问题是可以避免的。

可怕的路径:/var/lib/docker/containers

原理:

docker 创建容器默认是生成一串数字,系统会为这串数字创建一个目录。里面有*json.log 日志文件,记录容器的日志。

如果不修改docker 日志配置文件,默认生成一个日志,这里举例改为100M ,保留三个文件。

首先生成一个*json.log 文件,日志大小到100M 后,系统会自动把 *json.log 文件,写入 *json.log.1里面

等到*json.log 文件 再次到 100M后,系统会自动把 *json.log 文件,写入 *json.log.1里面,而*json.log.1 文件写入 *json.log.2 里面。

依次类推

我这里有过测试,把其中一个 *json.log.2  文件删除,过一会会生成  *json.log.2  文件,如果只保留 *json.log.2  文件,把 *json.log.1 日志文件删除,系统会吧 *json.log.1 日志文件内容写入 *json.log.2 里面。

一、修改docker 日志的配置文件

  我这里修改的,日志大小100M,保留三个文件

vi /etc/docker/daemon.json
{"registry-mirrors": ["https://registry.docker-cn.com"],
"log-driver":"json-file",
"log-opts": {"max-size":"100m", "max-file":"3"}
}

二、重启dokcer 

systemctl restart docker

三、创建容器

我这里使用的tomcat镜像,如果没有镜像可以自己拉取镜像

docker pull tomcat

docker run --name webtomcat -d -p 8081:8080  -d centos-jdk-tomcat:v20200121

创建容器后会生成一串数字,docker 会已这个数字创建一个容器的目录

/var/lib/docker/containers/5c0c836b5aaf2088e04d4df1ed9cc3aa770f300ca097b9a8c70416983ed31bd8

四、观察日志大小情况

cd /var/lib/docker/containers/5c0c836b5aaf2088e04d4df1ed9cc3aa770f300ca097b9a8c70416983ed31bd8

发现日志文件已经生成两个文件了,再等等看是否还生成一个文件。

技术图片

 

 

 最后发现,又生成了一个文件

技术图片

 

 

 4.1、观察日志是否是循环写入

我这里在*.1 日志文件最后写  1111

我这里在*.2 日志文件最后写  2222

技术图片

 

 

 技术图片

 

 

 4.2、观察日志文件是否有变化

需要登录*.log 这个文件变为100M后,发现变小了,发现他的日志写入到了 *.1里面,而*.1的日志写入到了 *.2里面

技术图片

 

 

 技术图片

 

 

 

五、这里遇到的问题

如果修改docker日志配置文件,重启docker ,原来的容器不会生产三个文件,不生效,需要重新创建容器

以上是关于docker 限制日志文件大小和数量的主要内容,如果未能解决你的问题,请参考以下文章

docker限制容器日志大小

docker 设置日志文件大小及个数

NLog 文件名中的日期并限制日志文件的数量

如何在ansible中指定docker的log-opt来限制容器的日志大小?

docker容器日志管理

将 Docker 容器限制为单个 cpu 核心