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

Ant*_*lor 15 docker docker-compose

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

docker-compose up
Run Code Online (Sandbox Code Playgroud)

我一次得到所有4个码头工人的日志输出,所以我可以看到他们在请求进来时如何互相交互.看起来像这样,一个请求从nginx到couchdb

http://i.imgur.com/E4GQ43F.png

现在的问题是我在GCE上运行负载均衡,当新的VM旋转时,它会自动启动docker并正常运行,我希望能够访问负载均衡的VM并查看实时日志,但是我无法让docker允许我这种风格,当我使用日志时,它给我正常的所有白色字体,没有标签来自哪里.

运用

docker events  
Run Code Online (Sandbox Code Playgroud)

什么都不做,它不会返回任何信息.

tldr; 获取视图的最佳方法是什么,与运行"docker-compose up"时获得的日志输出相同

Ant*_*lor 26

如果使用docker-compose,则使用

docker-compose logs --tail=0 --follow
Run Code Online (Sandbox Code Playgroud)

代替

docker logs --tail=0 --follow
Run Code Online (Sandbox Code Playgroud)

这将获得我最初寻找的输出.

  • 但是要求docker-compose.yml,我有4个并希望将它们全部附加到... (3认同)
  • 如果您发现这没有输出预期结果(例如,命令退出并且不遵循或显示非常过时的日志条目),请检查您是否正在使用 Docker 项目,即。使用 -p 标志来启动容器。如果使用 -p 启动它们,则需要将 -p 添加到日志命令中: docker-compose -p <project name> messages --tail 10 --follow (3认同)

Yur*_*rik 17

您可以查看所有正在运行的容器的日志

docker ps -q | xargs -L 1 docker logs
Run Code Online (Sandbox Code Playgroud)

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

  • 正在跟踪多个容器日志,例如:`docker ps -q | xargs -L 1 -P \`docker ps | wc -l\` docker 日志 --since 30s -f` (3认同)

Boe*_*Boy 10

我使用它的一个变体来跟踪(--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}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。如今,伐木问题变得如此严重,而其他离开我的草坪的老人咆哮......


Sta*_*uff 9

尝试“观看”

这是一个用于 docker 容器的快速而肮脏的 multitail/xtail。

watch 'docker ps --format "{{.Names}}" | sort | xargs --verbose --max-args=1 -- docker logs --tail=8 --timestamps'
Run Code Online (Sandbox Code Playgroud)

这是如何运作的:

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

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

上面列出的“xargs”方法(在另一个用户的答案中)将在容器停止和重新启动时停止工作。这里的“观察”方法就不存在这个问题。(但这也不是很好。)