如何清理Docker容器日志?

pko*_*out 22 docker

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

docker logs -f <container_name>
Run Code Online (Sandbox Code Playgroud)

我通过调用将大量数据记录到我的node.js应用程序中的日志中console.log().我需要清理日志,因为它太长了,docker logs命令首先在日志的现有行中运行,然后才能结束.如何清洁它再次缩短?我想看一个像这样的命令:

docker logs clean <container_name>
Run Code Online (Sandbox Code Playgroud)

但它似乎并不存在.

BMi*_*tch 66

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

docker logs --since 30s -f <container_name_or_id>
Run Code Online (Sandbox Code Playgroud)

或者你可以设置一些限制:

docker logs --tail 20 -f <container_name_or_id>
Run Code Online (Sandbox Code Playgroud)

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

echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
Run Code Online (Sandbox Code Playgroud)

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


最后,您可以将docker配置为在/etc/docker/daemon.json文件中使用以下内容自动旋转日志:

{
  "log-driver": "json-file",
  "log-opts": {"max-size": "10m", "max-file": "3"}
}
Run Code Online (Sandbox Code Playgroud)

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

  • 在Ubuntu中,您可以`du -chs/var/lib/docker/containers/*/*json.log`来了解容器日志使用的空间大小. (8认同)

max*_*sam 16

我发现的最好的脚本是

sudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log'
Run Code Online (Sandbox Code Playgroud)

它会清除所有日志,您无需停止容器。

归功于https://bytefreaks.net/applications/docker/horrible-solution-how-to-delete-all-docker-logs

  • 又短又甜,我喜欢,谢谢。 (2认同)
  • 仅用于清理特定容器的日志: `truncate -s 0 $(docker inform --format='{{.LogPath}}' &lt;container_name_or_id&gt;)` (2认同)

Ats*_*kai 14

如果要删除所有日志文件,不仅是针对特定容器的日志,还可以使用:

docker system prune
Run Code Online (Sandbox Code Playgroud)

但是,请注意,这不会清除运行容器的日志。

  • 嗯..这可能有用。但这很危险!这也将删除未使用的卷。 (7认同)
  • 仅供参考,这不会清除正在运行的容器的日志。 (5认同)
  • 很棒的一个。这可能是显而易见的,但最好记住这不会清除正在运行的容器的日志。 (3认同)

pko*_*out 10

这不是理想的解决方案,但在Docker构建命令之前,这是一个很好的解决方法.

docker-clean-logs.sh使用此内容创建脚本文件:

#!/bin/bash

rm $(docker inspect $1 | grep -G '"LogPath": "*"' | sed -e 's/.*"LogPath": "//g' | sed -e 's/",//g');
Run Code Online (Sandbox Code Playgroud)

授予执行权限:

chmod +x ./docker-clean-logs.sh
Run Code Online (Sandbox Code Playgroud)

停止要清理的Docker容器:

docker stop <container_name>
Run Code Online (Sandbox Code Playgroud)

然后运行上面的脚本:

./docker-clean-logs.sh <container_name>
Run Code Online (Sandbox Code Playgroud)

最后再次运行您的容器:

docker start ...
Run Code Online (Sandbox Code Playgroud)

此信息将转至用户sgarbesi:https://github.com/docker/compose/issues/1083

  • 不知道它是否曾经起作用,但它肯定不再起作用了。 (2认同)

小智 7

跑步:

 docker inspect {containerId}
Run Code Online (Sandbox Code Playgroud)

复制 LogPath 值

truncate -s 0 {LogaPath}
Run Code Online (Sandbox Code Playgroud)