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

mad*_*l10 3 node.js docker

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

jsa*_*nen 7

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

docker exec -it [CONTAINERID] cat /usr/src/app/nohup.out
Run Code Online (Sandbox Code Playgroud)

更好的模式是将输出存储到容器内部的单独的卷装文件夹删除状态,但也允许您直接从主机系统访问日志.

在这种特定情况下,我认为不需要单独的日志文件,甚至不需要nohup.只需为容器设置策略即可自动重启(--restart always)而不是nohup.


Eug*_*yer 5

您确实输出了日志

/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/