如何清理 Docker 容器日志?

新手上路,请多包涵

我使用阅读了我的 Docker 容器日志输出

docker logs -f <container_name>

我通过调用 console.log() 将大量数据记录到我的 node.js 应用程序的日志中。我需要清理日志,因为它太长了,而且 docker logs 命令在到达末尾之前首先会遍历日志的现有行。如何清洁它以使其再次变短?我想看到这样的命令:

 docker logs clean <container_name>

但它似乎不存在。

原文由 pkout 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 478
2 个回答

首先,如果你只需要看到更少的输出,你可以让 docker 只显示最近的行:

 docker logs --since 30s -f <container_name_or_id>

或者您可以限制多行:

 docker logs --tail 20 -f <container_name_or_id>


要删除 Docker for Linux 安装上的日志,您可以对单个容器运行以下命令:

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

请注意,这需要root,我不建议这样做。如果您在 docker 将日志写入同一文件的过程中将文件设为空,则可能会损坏日志文件。相反,您应该配置 docker 来轮换日志。


最后,您可以在 /etc/docker/daemon.json 文件中 配置 docker 以自动轮换日志:

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

这允许 docker 每个容器最多保留 3 个日志文件,每个文件限制为 10 兆(因此每个容器的日志限制在 20 到 30 兆之间)。您需要运行 systemctl reload docker 来应用这些更改。这些更改是任何新创建的容器的默认值,它们不适用于已创建的容器。您需要删除并重新创建任何现有容器才能应用这些设置。

原文由 BMitch 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题