如何正确清除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