docker服务日志如何获取日志?

时间:2018-04-24 07:03:42

标签: docker docker-swarm

我知道docker服务日志从容器中获取日志,这些容器是该服务的一部分。但它将如何获取?它是一次获取并缓存在某个地方或每次我发出命令" docker service logs"它会通过网络获取日志吗?

2 个答案:

答案 0 :(得分:1)

正如我的评论和其他答案所述,docker引擎始终缓存在该docker引擎上运行的容器的日志,并将它们存储在/var/lib/docker/containers/<container id>/<container id>-json.log目录中。当您从未运行所述服务的容器的计算机执行docker service logs时,docker始终通过网络从计算机中提取日志,并且它永远不会缓存。

话虽如此,您所面临的错误received message length 1869051448 exceeding the max size 4194304是因为可能有一条日志行太长而无法适应通过网络发送的gRPC对象。

解决方案

  1. --tail <n>指定docker service logs选项,其中n是您要查看的日志末尾的行数
  2. docker service ps而不是服务名称指定任务ID,仅为您提供该任务的日志,而不是来自服务副本的聚合日志。
  3. 如果拉出的日志中仍有那么长的日志行,这可能仍然会给你错误。

答案 1 :(得分:0)

默认情况下,泊坞窗日志为: /var/lib/docker/containers/<container id>/<container id>-json.log

这个问题是already answered

对于某些高级日志记录选项,请参阅logging drivers