【问题标题】:`docker stack` specific log locations`docker stack` 特定的日志位置
【发布时间】:2018-04-30 23:03:53
【问题描述】:

有没有办法使用docker-compose.yml 文件在已部署的docker 堆栈上指定日志记录文件?

我一直遭受 docker 服务和在 docker swarm 上运行的堆栈的间歇性崩溃,没有留下任何日志跟踪,我需要一些旋转日志,以便在这些情况发生时查看

我的docker info 输出:

$ docker info
Containers: 114
 Running: 4
 Paused: 0
 Stopped: 110
Images: 95
Server Version: 17.09.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog

【问题讨论】:

  • 你可以在机器上运行docker logs CONTAINER_ID,即使容器已经停止。
  • @ConstantinGalbenu 对这种方法没有任何运气,因为我通常得到Error response from daemon: No such container: CONTAINER_ID
  • 容器在进程失败时被销毁并快速重新创建
  • 您将 CONTAINER_ID 替换为容器的 ID。找出你运行的容器的 ID docker ps -a
  • 是的,我知道

标签: docker docker-compose docker-swarm


【解决方案1】:

您可能没有得到想要的东西有几个原因。

  1. 是的,上面的 @hichamx 是正确的,您可以更改服务的默认 JSON 日志驱动程序的文件大小设置,但这可能不是您的问题。

  2. 删除容器时会删除日志。使用 Swarm 服务,这些“任务”只在 Task History Retention Limit 周围徘徊,如在 docker info 中所见。这默认为 5,这意味着 4 个旧任务将挂起。如果您的服务任务在启动后迅速崩溃,您就会明白……日志不会很长。在磁盘空间允许的情况下,使用docker swarm update --task-history-limit 设置更大的数字。

  3. docker service logs 仅显示您的应用程序向容器内部 向 stdout/stderr 报告的内容。它们不会向您显示 Swarm 编排器正在执行的操作。为此使用docker events。它不会存储太多历史数据,因此您需要将其保持在您的 shell 中运行或以其他方式捕获它以获取历史数据。 events 告诉你容器创建/删除/失败之类的事情。

  4. 理想情况下,如果这是应用程序在内部执行的操作,它会在退出时报告错误,docker 会将其存储在容器检查元数据中 .State.Error 下。 One-liners 很酷,但有时不像我们需要的那样灵活。这是一个示例,它首先列出 a 中的所有任务,然后获取每个任务的容器 ID,然后检查每个容器并显示错误(如果有)。不幸的是,它仅适用于您连接到的本地服务器上的容器,但希望您了解每个 $() 中的嵌套命令。

docker inspect -f "{{.State.Error}}" $(docker inspect -f "{{.Status.ContainerStatus.ContainerID}}" $(docker service ps <servicename> -q))

【讨论】:

  • 谢谢,记录文档中没有提供的优秀信息
【解决方案2】:

根据您关于轮换日志的问题,您可以在堆栈文件中为每个服务添加以下选项:

  logging:
   driver: "json-file"
   options:
      max-size: "5m"
      max-file: "3"

您还可以使用 docker service logs service_name 查看特定服务的日志。

默认情况下,当容器退出时它不会被删除,因此您始终可以看到它的日志。

编辑

您可以使用以下内容将其重定向到文件中(-f 标志跟随输出)

(nohup docker service logs service -f  >> /path-to-file/file.log)&

然后检查哪些 docker 服务日志输出已经被重定向。

ps aux | grep "docker service logs"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2017-06-10
    • 2019-03-17
    • 1970-01-01
    相关资源
    最近更新 更多