我使用 docker logs [container-name]
来查看特定容器的日志。
有没有一种优雅的方法来清除这些日志?
原文由 Youssouf Maiga 发布,翻译遵循 CC BY-SA 4.0 许可协议
我使用 docker logs [container-name]
来查看特定容器的日志。
有没有一种优雅的方法来清除这些日志?
原文由 Youssouf Maiga 发布,翻译遵循 CC BY-SA 4.0 许可协议
利用:
truncate -s 0 /var/lib/docker/containers/*/*-json.log
你可能需要 sudo
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
参考。 Jeff S. 如何正确清除 Docker 容器的日志?
原文由 duketwo 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答2.4k 阅读✓ 已解决
2 回答784 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.6k 阅读
2 回答1.2k 阅读
1 回答947 阅读
首先是不好的答案。从 这个问题 有一个你可以运行的单线:
而不是回声,有更简单的:
或者有 truncate 命令:
我不是其中任何一个的忠实粉丝,因为它们直接修改了 Docker 的文件。当 docker 将 json 格式的数据写入文件时,可能会发生外部日志删除,从而导致部分行,并破坏从
docker logs
cli 读取任何日志的能力。有关发生这种情况的示例,请参阅 对 duketwo 的回答的评论:相反,您可以让 Docker 自动为您轮换日志。如果您使用默认的 JSON 日志记录驱动程序,则可以通过 dockerd 的附加标志来完成此操作:
您也可以将其设置为 daemon.json 文件的一部分,而不是修改启动脚本:
这些选项需要配置为具有 root 访问权限。确保在更改此文件以应用设置后运行
systemctl reload docker
。然后,此设置将成为任何新创建容器的默认设置。请注意,需要删除并重新创建现有容器以接收新的日志限制。可以将类似的日志选项传递给单个容器以覆盖这些默认值,从而允许您在单个容器上保存更多或更少的日志。从
docker run
这看起来像:或在撰写文件中:
为了额外节省空间,您可以从 json 日志驱动程序切换到“本地”日志驱动程序。它采用相同的 max-size 和 max-file 选项,但不是存储在 json 中,而是使用更快更小的二进制语法。这允许您在相同大小的文件中存储更多日志。 daemon.json 条目看起来像:
本地驱动程序的缺点是依赖于直接访问 json 日志的外部日志解析器/转发器将不再工作。因此,如果您使用诸如 filebeat 之类的工具发送到 Elastic 或 Splunk 的通用转发器,我会避免使用“本地”驱动程序。
在我的 提示和技巧演示文稿 中,我对此有更多的了解。