同时查看所有 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”方法没有那个问题。 (但也不是很好。)
我目前使用 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”方法没有那个问题。 (但也不是很好。)