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

时间:2016-04-20 23:04:54

标签: docker docker-compose

我目前使用docker作为后端,当我第一次用

启动时
docker-compose up

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

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

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

使用

docker events  

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

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

5 个答案:

答案 0 :(得分:18)

如果使用docker-compose,请使用

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

而不是

docker logs --tail=0 --follow

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

答案 1 :(得分:8)

您可以使用以下命令查看所有正在运行的容器的日志

docker ps -q | xargs -L 1 docker logs

理论上,如果xargs与--follow一起运行,而xargs的数量大于正在运行的容器的数量,那么这对-P <count>也可能适用。

答案 2 :(得分:1)

我使用此变量的变体来尾部(-跟随)所有日志,并指示当时哪个日志在尾部。此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}

希望这会有所帮助。如今,伐木变得如此麻烦,而其他下车的老人都在抱怨...

答案 3 :(得分:1)

如果使用的是Docker Swarm,则可以通过以下方式找到服务

docker service ls

获取ID,然后运行

docker service logs $ID -f 

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

答案 4 :(得分:0)

试试“看”

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

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

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

当容器停止和重新启动时,上面列出的“xargs”方法将停止工作。这里的这种“观察”方法没有这个问题。 (但也不是很好。)