我有一个运行用户代码的应用程序。我想确保Docker没有收集过多的日志,无论如何我都会丢弃这些日志。为此,我尝试使用max-size
和max-file
日志记录选项来获取用户输出的最后几千字节并丢弃其余部分,但这样做似乎不起作用。
如果我这样做:
$ docker run --log-opt max-size=2 --log-opt max-file=1 python:2 python -c "for i in range(10): print i"
0
1
2
3
4
5
6
7
8
9
然后它仍会在屏幕上打印完整输出。如果我在主机上手动检查日志,我可以看到包含完整输出的文件。
在这种情况下我不应该只获得9\n
吗?我在这里做错了什么?
答案 0 :(得分:2)
Dockers JSON file log options不会影响stdout和stderr流式传输到docker
客户端。在前台运行时,您将看到完整的输出。
当您运行docker logs
时,信息将从文件中撤回。
最大尺寸需要一个单位。千字节,兆字节或千兆字节。
--log-opt max-size=[0-9+][k|m|g]
这设置了JSON日志文件的大小,因此与仅影响大小的行长度相比,有额外的元数据。
{"log":"1\n","stream":"stdout","time":"2016-05-30T07:39:31.265191929Z"}
您应该在1k的空间中最多容纳14个日志条目。码头工人日志轮换是否准确是另一回事。
在任何情况下,您可能都在浪费时间处理小于4k的文件大小。