我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
当前回答
通过设置日志清除功能,可以定期清除日志。
“/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)
要移除/清除docker容器日志,我们可以使用下面的命令
$(docker inspect container_id|grep "LogPath"|cut -d """ -f4) 或 $(docker inspect container_name|grep "LogPath"|cut -d """ -f4)
我需要一些可以作为一个命令运行的东西,而不是必须编写docker ps并复制每个容器ID并多次运行该命令。我改编了BMitch的答案,我想分享一下,以防其他人发现这有用。
混合xargs似乎实现了我在这里需要的:
docker ps --format='{{.ID}}' | \
xargs -I {} sh -c 'echo > $(docker inspect --format="{{.LogPath}}" {})'
这将获取docker ps列出的每个容器ID(将删除列表中任何容器的日志!),将其输送到xargs中,然后回显一个空白字符串来替换容器的日志路径。
在我的Ubuntu服务器上,即使是sudo,我也会得到无法打开' /var/lib/docker/containers/*/*-json.log '来写:没有这样的文件或目录
但是结合docker检查和截断答案是有效的:
sudo truncate -s 0 `docker inspect --format='{{.LogPath}}' <container>`
Docker为Mac用户,这里是解决方案:
查找日志文件路径: $ docker inspect | grep日志 SSH进入docker机器(假设名称是默认的,如果不是,运行docker-machine ls来查找): $ docker-machine SSH默认 更改为root用户(参考): $ sudo -i 删除日志文件内容: $ echo "" > log_file_path_from_step1 .