我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
我使用docker logs [container-name]来查看特定容器的日志。
有什么优雅的方法来清除这些日志吗?
当前回答
在我的Ubuntu服务器上,即使是sudo,我也会得到无法打开' /var/lib/docker/containers/*/*-json.log '来写:没有这样的文件或目录
但是结合docker检查和截断答案是有效的:
sudo truncate -s 0 `docker inspect --format='{{.LogPath}}' <container>`
其他回答
通过设置日志清除功能,可以定期清除日志。
“/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命令直接做到这一点。
您可以限制日志的大小,或者使用脚本删除与容器相关的日志。你可以在这里找到脚本示例(从底部阅读):特性:清除日志历史#1083的能力
查看docker-compose文件引用的日志部分,您可以在其中为一些日志驱动程序指定选项(例如日志旋转和日志大小限制)。
你也可以在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)
感谢@BMitch的回答,我刚刚写了一个shell脚本来清理所有容器的日志:
#!/bin/bash
ids=$(docker ps -a --format='{{.ID}}')
for id in $ids
do
echo $(docker ps -a --format='{{.ID}} ### {{.Names}} ### {{.Image}}' | fgrep $id)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' $id)
ls -llh $(docker inspect --format='{{.LogPath}}' $id)
done