如果在Linux中使用coreutils tail命令,则具有-f选项,该选项可让您从日志的当前位置开始跟踪日志文件(它不会移至文件的开头并显示所有内容)。
此功能是否可以在Docker日志中使用,而不必等待它遍历整个日志?
也许我正在为选项尝试错误的论点?使用我尝试过的可用文档
docker logs --since 1m somecontainer
和
docker logs -f --since 1m somecontainer
看来,它实际上遍历了整个日志文件(这可能需要很长时间),一旦到达指定的时间范围,它就会开始回显到屏幕。
是否有一种无需等待就可以从当前点开始拖尾的方法? 我最好的选择是始终注销到某个外部文件,然后仅使用coreutils tail命令添加该文件吗?
答案 0 :(得分:5)
我想知道为什么不使用docker logs --help
来获得帮助吗?从最后10行开始,尝试以下操作。更多详细信息here。
docker logs -f --tail 10 container_name
答案 1 :(得分:1)
日志驱动程序的默认设置是json文件格式,这是我认为可靠解析的唯一方法,涉及从头开始解析文件,我怀疑这正是docker所做的。因此,我不确定是否可以选择完全按照您的要求进行操作。但是,使用默认的json日志驱动程序启动容器时,可以调整两个日志选项。
您可以在这里阅读有关这些选项的信息:https://docs.docker.com/config/containers/logging/json-file/
我通常使用/etc/docker/daemon.json文件中的以下行,为正在docker主机上运行的所有容器设置这些选项的新默认值:
{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
这两个选项表示最多保留3个10兆json日志文件。结果是每个容器的日志限制在20-30兆之间。您需要在dockerd进程上触发重新加载以加载此文件(killall -HUP dockerd
或systemctl reload docker
)。
您可以通过在运行命令中(或在撰写文件中)传递日志选项来在单个容器上覆盖此设置:
docker container run --log-opt max-size=5m --log-opt max-file=2 ...
似乎没有一种方法可以更改现有容器的日志记录选项,因此您将需要重新创建容器以应用这些更改。
最终结果是docker可能仍必须解析整个文件才能显示最新的日志,但是与默认的无限制日志记录选项相比,使用自动旋转日志文件的文件要小得多。
答案 2 :(得分:1)
或者,我们可以按时间(例如,从最近2分钟开始)按以下方式检查日志:
docker logs --since=2m <container_id> // since last 2 minutes
docker logs --since=1h <container_id> // since last 1 hour
答案 3 :(得分:0)
我认为您的操作正确无误,并且在尝试时似乎可以正常工作。您是否正在使用某些非默认日志驱动程序等?
要仅关注新的日志文件,可以使用-f --since 0m
。
答案 4 :(得分:0)
使用-tail 开关:
> docker logs -f <container name> --tail 10
这将显示从最后10行开始的日志