我使用docker logs [container-name]来查看特定容器的日志。

有什么优雅的方法来清除这些日志吗?


当前回答

Use:

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:如何正确地清除Docker容器的日志?

参考:在文件被使用时截断它(Linux)

其他回答

Docker系统修剪 在命令提示符下执行该命令

在使用docker桌面的计算机上,我们使用: Truncate -s 0 //wsl.localhost/docker-desktop-data/data/docker/containers/*/*-json.log

对于linux发行版,你可以使用这个路径: 截断-s 0 /var/lib/docker/containers/*/*-json.log

我需要一些可以作为一个命令运行的东西,而不是必须编写docker ps并复制每个容器ID并多次运行该命令。我改编了BMitch的答案,我想分享一下,以防其他人发现这有用。

混合xargs似乎实现了我在这里需要的:

docker ps --format='{{.ID}}' | \
  xargs -I {} sh -c 'echo > $(docker inspect --format="{{.LogPath}}" {})'

这将获取docker ps列出的每个容器ID(将删除列表中任何容器的日志!),将其输送到xargs中,然后回显一个空白字符串来替换容器的日志路径。

我更喜欢这个(从上面的解决方案):

truncate -s 0 /var/lib/docker/containers/*/*-json.log

然而,我正在运行几个系统(Ubuntu 18。x Bionic为例),该路径不能正常工作。Docker是通过Snap安装的,所以到容器的路径更像:

truncate -s 0 /var/snap/docker/common/var-lib-docker/containers/*/*-json.log

这将删除所有容器的日志文件:

sudo find /var/lib/docker/containers/ -type f -name "*.log" -delete