当前位置: 首页 > 面试题库 >

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

赫连彬炳
2023-03-14
问题内容

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容器日志输出 我通过调用来将大量数据记录到node.js应用程序的日志中。我需要清理日志,因为它太长了,并且该命令首先运行日志的现有行,然后结束。我该如何清洁使其再次变短?我想查看类似的命令: 但是它似乎不存在。 问题答案: 首先,如果只需要查看较少的输出,则可以让docker只向您显示更新的行: 或者,您可以限制一些行: 要删除Docker for L

  • 问题内容: 我正在尝试通过以下方式为我的docker容器明确指定IP地址: 我收到以下错误: 我真的不在乎端口10000。我的目标是选择一个特定的容器IP,并将端口9000和9090暴露给主机。 我看了其他一些问题,但没有看到明确的语法来做到这一点 问题答案: 该参数用于将端口从容器转发到主机,而不用于分配IP。 没有简单的方法将固定IP分配给Docker容器,我强烈建议您不要尝试。而是重新架构您

  • 我有很多运行docker容器的测试。每个都有一个卷。 如何知道需要删除的卷名? 例如: 手动停止并删除容器后,卷仍然存在。 我不想删除所有卷,因为其中一些卷仍在使用中。

  • 问题内容: 此问题与我是否应该担心多余的,未运行的Docker容器有关?。 我想知道如何删除旧容器。将让你删除一个,但我有很多了。没有提供选择选项(如全部,或按图像名称)。 也许有一个存储这些容器的目录,可以方便地手动删除它们? 问题答案: 从Docker 1.13.x开始, 您可以使用Docker容器prune: 这将删除所有停止的容器,并且应在所有平台上以相同的方式工作。 还有一个Docker

  • 我记得用过 几个月前没有问题地链接命令,但现在这不起作用了,我得到了以下输出: 什么改变了?如何在一行中删除所有Docker运行容器?如果有用的话,我正在Windows ;10上使用Docker for Windows(本机与Hyper-V一起使用,而不是与VirtualBox一起使用),我使用的命令在以前的Windows 8 Docker工具箱安装中运行良好。