同时查看所有 docker 个容器的日志

View logs for all docker containers simultaneously

我目前使用 docker 作为我的后端,当我第一次启动它们时

docker-compose up

我一次获得了所有 4 个 docker 的日志输出,因此我可以看到当请求进入时它们是如何相互交互的。看起来像这样,一个请求从 nginx 到 couchdb

现在的问题是我 运行 在具有负载平衡的 GCE 上,当一个新的 VM 启动时,它会自动启动 dockers 并正常运行,我希望能够访问负载平衡的 VM 并查看实时日志,但我无法获得 docker 允许我使用这种样式,当我使用日志时,它给我正常的全白字体,没有标签来自哪里。

正在使用

docker events  

什么都不做,它不会 return 任何信息。

tldr;获得视图的最佳方式是什么,与 运行 "docker-compose up"

时获得的日志输出相同

如果使用 docker-compose,则使用

docker-compose logs --tail=0 --follow

而不是

docker logs --tail=0 --follow

这将得到我最初寻找的输出。

您可以看到所有 运行 个容器的日志

docker ps -q | xargs -L 1 docker logs

理论上,如果 xargs 是 运行 和 -P <count>,这也可能适用于 --follow,其中计数高于 运行 容器的数量。

我使用它的一个变体来跟踪(--follow)所有日志并指出当时哪个日志在跟踪。此 bash 包括 stdout 和 stderr。请注意,之后您可能需要清除 *.{log,err} 的 /tmp 目录。

for c in $(docker ps -a --format="{{.Names}}")
do
       docker logs -f $c > /tmp/$c.log 2> /tmp/$c.err &
done
tail -f /tmp/*.{log,err}

希望这对您有所帮助。这些天日志记录变得如此成问题,其他下车的老人咆哮...

如果您使用的是Docker Swarm,您可以通过

找到您的服务
docker service ls

抓取id,然后运行

docker service logs $ID -f 

如果服务是用 tty: true 定义的,那么您必须 运行 使用 --raw 标志。请注意,这不会告诉您哪个容器正在提供输出的日志条目。

尝试“观看”

这是 docker 个容器的快速而简单的 multitail/xtail。

# watch 'docker ps --format "{{.Names}}" | sort | xargs --verbose --max-args=1 -- docker logs --tail=8 --timestamps'

根据需要调整参数“--tail=8”,使所有内容仍然适合一个屏幕。

上面列出的“xargs”方法将随着容器停止和重新启动而停止工作。这里的“watch”方法没有那个问题。 (但也不是很好。)