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

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


当前回答

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

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

其他回答

你也可以在docker运行命令行上提供log-opts参数,如下所示:

docker run --log-opt max-size=10m --log-opt max-file=5 my-app:latest

或者是码头式的。Yml是这样的

my-app:
image: my-app:latest
logging:
    driver: "json-file"
    options:
        max-size: "10m"
        max-file: "5"

致谢:https://medium.com/@Quigley_Ja/ roting-docker -logs-keeping-your-overlay-folder-small-40cfa2155412 (James Quigley)

通过设置日志清除功能,可以定期清除日志。

“/etc/logrotate.d/docker-logs”文件示例

/var/lib/docker/containers/*/*.log {
 rotate 7
 daily
 compress
 size=50M
 missingok
 delaycompress
 copytruncate
}

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)

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

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

下面是一个清除docker容器日志的跨平台解决方案:

docker run --rm -v /var/lib/docker:/var/lib/docker alpine sh -c "echo '' > $(docker inspect --format='{{.LogPath}}' CONTAINER_NAME)"

将其粘贴到终端中,并将CONTAINER_NAME更改为所需的容器名称或id。