`docker stack` 特定的日志位置
`docker stack` specific log locations
有没有办法在已部署的 docker
堆栈上使用 docker-compose.yml
文件指定日志文件?
我在 docker 集群 docker 服务和堆栈 运行 上一直遭受间歇性崩溃,没有留下任何日志痕迹,我需要一些循环日志,我可以看看这些什么时候发生
我的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
根据您关于旋转日志的问题,您可以为堆栈文件中的每个服务添加以下选项:
logging:
driver: "json-file"
options:
max-size: "5m"
max-file: "3"
您还可以使用 docker 服务日志 service_name
查看特定服务的日志。
默认情况下,当容器退出时它不会被删除,因此您始终可以看到它的日志。
编辑:
您可以使用以下命令将其重定向到文件中(-f 标志跟随输出)
(nohup docker service logs service -f >> /path-to-file/file.log)&
然后检查哪个 docker 服务日志输出已经重定向。
ps aux | grep "docker service logs"
有多种原因可能导致您得不到想要的东西。
是的,上面的@hichamx 是正确的,您可以更改服务的默认 JSON 日志驱动程序的文件大小设置,但这可能不是您的问题。
删除容器时也会删除日志。使用 Swarm 服务,那些 "tasks" 只在 Task History Retention Limit
周围徘徊,如 docker info
所示。这默认为 5,这意味着 4 个旧任务将挂起。如果您的服务任务在启动后很快崩溃,您就会明白……日志不会很长。使用 docker swarm update --task-history-limit
设置更大的数字,disk-space 允许。
docker service logs
仅显示您的应用向 stdout/stderr 容器内报告的内容。它们不会向您显示 Swarm 编排器正在执行的操作。为此使用 docker events
。它不会存储太多历史记录,因此您需要将 运行 保留在 shell 中或以其他方式捕获它作为历史记录。 events
告诉你容器 creation/deletion/failure.
理想情况下,如果它是应用程序在内部执行的操作,它会在退出时报告错误,docker 将存储在 .State.Error
下的容器检查元数据中。单衬垫很酷,但有时不如我们需要的那样灵活。这是一个示例,它首先列出 a 中的所有任务,然后获取每个任务的容器 ID,然后检查每个容器并显示错误(如果有)。不幸的是,它仅适用于您所连接的本地服务器上的容器,但希望您了解每个 $()
.
中的嵌套命令
docker inspect -f "{{.State.Error}}" $(docker inspect -f "{{.Status.ContainerStatus.ContainerID}}" $(docker service ps <servicename> -q))
有没有办法在已部署的 docker
堆栈上使用 docker-compose.yml
文件指定日志文件?
我在 docker 集群 docker 服务和堆栈 运行 上一直遭受间歇性崩溃,没有留下任何日志痕迹,我需要一些循环日志,我可以看看这些什么时候发生
我的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
根据您关于旋转日志的问题,您可以为堆栈文件中的每个服务添加以下选项:
logging:
driver: "json-file"
options:
max-size: "5m"
max-file: "3"
您还可以使用 docker 服务日志 service_name
查看特定服务的日志。
默认情况下,当容器退出时它不会被删除,因此您始终可以看到它的日志。
编辑:
您可以使用以下命令将其重定向到文件中(-f 标志跟随输出)
(nohup docker service logs service -f >> /path-to-file/file.log)&
然后检查哪个 docker 服务日志输出已经重定向。
ps aux | grep "docker service logs"
有多种原因可能导致您得不到想要的东西。
是的,上面的@hichamx 是正确的,您可以更改服务的默认 JSON 日志驱动程序的文件大小设置,但这可能不是您的问题。
删除容器时也会删除日志。使用 Swarm 服务,那些 "tasks" 只在
Task History Retention Limit
周围徘徊,如docker info
所示。这默认为 5,这意味着 4 个旧任务将挂起。如果您的服务任务在启动后很快崩溃,您就会明白……日志不会很长。使用docker swarm update --task-history-limit
设置更大的数字,disk-space 允许。docker service logs
仅显示您的应用向 stdout/stderr 容器内报告的内容。它们不会向您显示 Swarm 编排器正在执行的操作。为此使用docker events
。它不会存储太多历史记录,因此您需要将 运行 保留在 shell 中或以其他方式捕获它作为历史记录。events
告诉你容器 creation/deletion/failure.理想情况下,如果它是应用程序在内部执行的操作,它会在退出时报告错误,docker 将存储在
.State.Error
下的容器检查元数据中。单衬垫很酷,但有时不如我们需要的那样灵活。这是一个示例,它首先列出 a 中的所有任务,然后获取每个任务的容器 ID,然后检查每个容器并显示错误(如果有)。不幸的是,它仅适用于您所连接的本地服务器上的容器,但希望您了解每个$()
. 中的嵌套命令
docker inspect -f "{{.State.Error}}" $(docker inspect -f "{{.Status.ContainerStatus.ContainerID}}" $(docker service ps <servicename> -q))