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