docker container如何支持日志rotate
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker container如何支持日志rotate相关的知识,希望对你有一定的参考价值。
参考技术A docker container如何支持日志rotate缺省情况下docker daemon会把container日志存放到: /var/lib/docker/containers/<containerid>/<containerid>-json.log ,这是RedHat下的路径,不同的Linux发行平台会不一样,请参考各自文档。
其中<containerid>是64字节长度的长名,例如:
/var/lib/docker/containers/49f9b1d950553a732c6493bb5794871f7169f235de0be50b0da1c98f3d9f7e2b/49f9b1d950553a732c6493bb5794871f7169f235de0be50b0da1c98f3d9f7e2b-json.log
在container里面执行的进程输出的stdout和stderr都被被docker daemon输出到上述日志文件。
上述缺省情况下是一个json格式的文本文件,随着container运行时间的增长,日志文件会越来越大,最终占用过量的磁盘空间。
采用log rotate的办法自动删除多余的历史日志信息,保证每个container占用最多的磁盘空间。
docker本身提供这种功能。
docker log rotate提供的策略,有两个参数用来设置log rotate的配置值:
两个数字相乘就是一个container允许占用的最大日志磁盘空间。例如:
假设: log-max-size=10M, log-max-file=5
那么在最多会生成5个日志文件:
其中/var/lib/docker/containers/<containerid>/<containerid>-json.log是当前正在写的日志文件,其他的是历史日志文件(每个文件大小5M),数字越大表示越老的日志。当当前的日志文件满5M后,把当前日志文件备份成json.1.log,而把json.1.log重命名成json.2.log,把json.2.log重命名成json.3.log,把json.3.log重命名成json.4.log,再把json.4.log删除了。
有一个限制:
docker log rotate只支持基于文件大小轮转,不支持基于时间的rotate,例如每小时生成一个日志文件,每天生成一个日志文件这种方式;这个需求还是很常用的。
这样所有新起来的container都能使用日志轮换的功能,而不需要为每个container单独设置。
重启docker daemon,配置生效:
在每个container启动的时候在命令行设置:
以上是关于docker container如何支持日志rotate的主要内容,如果未能解决你的问题,请参考以下文章