大佬教程收集整理的这篇文章主要介绍了记录在同一主机上运行的多个容器的解决方案,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
目前,我们将所有应用程序日志从多个容器重定向到stdout,并通过主机中的rsyslog将/ var / log / message收集到ELK堆栈.
所有docker容器日志显示为docker / xxxxxxxx,我们无法分辨这个日志的应用程序,无论如何我们可以轻松地将应用程序与docker stdout中的多个容器日志区分开来?
似乎没有办法使用docker命令执行此操作,但是在bash中,您可以同时运行多个命令,而使用sed,您可以使用容器名称作为前缀.
docker logs -f --tail=30 container1 | sed -e 's/^/[-- containerA1 --]/' &
docker logs -f --tail=30 container2 | sed -e 's/^/[-- containerM2 --]/' &
并且您将同时看到两个容器的输出.
[-- containerA1 --] :: logging line
[-- containerA1 --] :: logging line
[-- containerM2 --] :: logging line
[-- containerM2 --] :: logging line
[-- containerA1 --] :: logging line
[-- containerA1 --] :: logging line
[-- containerM2 --] :: logging line
[-- containerM2 --] :: logging line
要立即拖尾所有容器:
#!/bin/bash
names=$(docker ps --format "{{.Names}}")
echo "tailing $names"
while read -r name
do
# eval to show container name in jobs list
eval "docker logs -f --tail=5 \"$name\" | sed -e \"s/^/[-- $name --] /\" &"
# For Ubuntu 16.04
#eval "docker logs -f --tail=5 \"$name\" |& sed -e \"s/^/[-- $name --] /\" &"
done < "$names"="" function="" _exit="" {="" echo="" echo="" "stopping="" tails="" $(jobs="" -p="" |="" tr="" '\n'="" '="" ')"="" echo="" "..."="" #="" using="" `sh="" -c`="" so="" that="" if="" some="" have="" exited,that="" error="" will="" #="" not="" prevent="" further="" tails="" from="" being="" killed.="" jobs="" -p="" |="" tr="" '\n'="" '="" '="" |="" xargs="" -i="" %="" sh="" -c="" "kill="" %="" ||="" true"="" echo="" "done"="" }="" #="" on="" ctrl+c,kill="" all="" tails="" started="" by="" this="" script.="" trap="" _exit="" exit="" #="" for="" ubuntu="" 16.04="" #trap="" _exit="" int="" #="" don't="" exit="" this="" script="" until="" ctrl+c="" or="" all="" tails="" exit.="" wait="">
并阻止他们运行fg,然后按ctrl c为每个容器.
更新:感谢@ Flo-Woo支持Ubuntu 16.04
以上是大佬教程为你收集整理的记录在同一主机上运行的多个容器的解决方案全部内容,希望文章能够帮你解决记录在同一主机上运行的多个容器的解决方案所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。