如何正确清除Docker容器的日志?

docker logs [container-name]过去经常查看特定容器的日志。

有清除这些日志的好方法吗?

回答:

从这个问题出发,您可以运行一种代码:

echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)

或有类似的truncate命令:

truncate -s 0 $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)


我对这两个都不满意,因为它们直接修改Docker的文件。当docker将json格式的数据写入文件时,可能会发生外部日志删除,导致部分行并破坏了从docker

logscli 读取任何日志的能力。

相反,您可以让Docker自动为您轮换日志。如果使用默认的JSON日志记录驱动程序,则使用dockerd的其他标志来完成此操作:

dockerd ... --log-opt max-size=10m --log-opt max-file=3

您还可以将其设置为daemon.json文件的一部分,而不用修改启动脚本:

{

"log-driver": "json-file",

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

}

这些选项需要使用root访问权限进行配置。请确保systemctl reload docker在更改此文件以应用设置后运行a

。然后,此设置将是所有新创建的容器的默认设置。请注意,需要删除并重新创建现有容器以接收新的日志限制。


可以将类似的日志选项传递到单个容器以覆盖这些默认值,从而使您可以在单个容器上保存更多或更少的日志。从这docker run看起来像:

docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 ...

或在撰写文件中:

version: '3.7'

services:

app:

image: ...

logging:

options:

max-size: "10m"

max-file: "3"


为了节省更多空间,您可以从json日志驱动程序切换到“本地”日志驱动程序。它采用相同的max-size和max-

file选项,但不是使用json而是使用更快和更小的二进制语法来存储在json中。这使您可以在相同大小的文件中存储更多日志。的daemon.json条目如下所示:

{

"log-driver": "local",

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

}

本地驱动程序的缺点是依赖直接访问json日志的外部日志解析器/转发器将不再起作用。因此,如果您使用filebeat之类的工具发送给Elastic或Splunk的通用转发器,则应避免使用“本地”驱动程序。

我的“ 提示和技巧”演示中对此有更多介绍。

以上是 如何正确清除Docker容器的日志? 的全部内容, 来源链接: utcz.com/qa/431691.html

回到顶部