同时查看所有Docker容器的日志

jtoj6r0c  于 2023-02-03  发布在  Docker
关注(0)|答案(5)|浏览(218)

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

docker-compose up

我同时获得了所有4个docker的日志输出,因此我可以看到当请求传入时它们是如何相互交互的。如下所示,一个请求从nginx发送到couchdb

现在的问题是,我运行在GCE上的负载平衡,当一个新的虚拟机旋转起来,它自动启动码头和正常运行,我希望能够访问负载平衡的虚拟机和查看实时日志,但我不能让码头允许我这种风格,当我使用日志,它给我正常的全白色字体,没有标签,它来自哪里。
使用

docker events

不执行任何操作,它不会返回任何信息。
tldr;获取视图的最佳方法是什么,与运行“docker-composite up”时获得的日志输出相同

1rhkuytd

1rhkuytd1#

如果使用docker-compose,则使用

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

代替

docker logs --tail=0 --follow

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

c7rzv4ha

c7rzv4ha2#

您可以查看所有运行container的日志

docker ps -q | xargs -L 1 docker logs

从理论上讲,如果xargs与-P <count>一起运行,这也可能适用于--follow,其中计数高于正在运行的容器的数量。

oiopk7p5

oiopk7p53#

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

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}

希望这有帮助。伐木已经成为如此有问题的这些天,和其他得到我的草坪老头咆哮...

pb3s4cty

pb3s4cty4#

试试"看"

这里有一个快速而肮脏的码头集装箱的multitail/xtail。

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

工作原理:

  • watch每隔几秒钟运行一次
  • docker ps --format "{{.Names}}"以获取所有运行容器的名称
  • sort进行排序
  • xargs将这些名称赋予docker logs
  • docker logs打印实际日志

根据需要调整参数"--tail = 8",以便所有内容仍适合显示在一个屏幕上。
上面列出的"xargs"方法(在另一个用户的回答中)将在container停止和重新启动时停止工作。这里的"watch"方法没有这个问题(但也不是很好)。

krcsximq

krcsximq5#

如果您正在使用Docker Swarm,您可以通过以下方式找到您的服务

docker service ls

获取id,然后运行

docker service logs $ID -f

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

相关问题