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

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

尽pipe在容器中使用日志文件(没有卷装)是一种已知的反模式 ,但是您可以使用exec来轻松输出这些文件,例如cat:

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

更好的模式是将输出存储到独立的安装在卷上的文件夹中,从容器中删除状态,但也可以让您直接从主机系统访问日志。

在这个特定的情况下,我没有看到需要一个单独的日志文件,甚至没有nohup。 只需为您的容器设置策略,以便自动重新启动 ( --restart always )而不是nohup。

你输出你的日志

/dev/stdout所有正常日志

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

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

访问日志就像写docker logs <containername>或者docker-compose logs <servicename> – 如果你使用docker-compose up创build了你的堆栈,那么无论如何你都会看到日志 – 非常方便。

在生产级别,你想进一步处理日志stream,请看https://github.com/gliderlabs/logspout

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