如何在docker容器中查看运行应用程序的日志?

时间:2017-06-25 07:28:18

标签: node.js docker

我在/ usr / src / app中的docker容器中运行了一个节点js应用程序。我想使用nohup(nohup node index.js&)运行此应用程序。为了一般/调试目的,查看附加到nohup.out的输出的最佳方法是什么? 我是否需要一直使用docker cp复制到主机操作系统。有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:5)

虽然在容器内使用日志文件(没有卷安装)是a known anti-pattern,但您可以使用exec和cat一起轻松输出这些文件:

docker exec -it [CONTAINERID] cat /usr/src/app/nohup.out

更好的模式是将输出存储到容器内部的单独volume-mounted folder删除状态,但也允许您直接从主机系统访问日志。

在这种特定情况下,我认为不需要单独的日志文件,甚至不需要nohup。只需将容器的政策设置为restart it automatically--restart always)而不是nohup。

答案 1 :(得分:3)

您输入日志

所有正常日志

/dev/stdout

如果您的应用程序在正常日志和错误日志之间有所不同,请使用/dev/stderr来管道您拥有的所有错误。

因此,不要像/var/log/nohup.log那样定义日志,而是将日志文件定义为dev/stdout

访问日志就像编写docker logs <containername>docker-compose logs <servicename>一样简单 - 如果您使用docker-compose up启动了堆栈,那么无论如何都会在您面前看到日志 - 非常方便。

在生产等级中,您希望进一步处理日志流,请查看https://github.com/gliderlabs/logspout

如果你想更深层次,请将ELK堆栈添加到https://logz.io/learn/complete-guide-elk-stack/