Docker容器记录

时间:2019-01-18 13:21:04

标签: docker logging

我对Docker日志不了解。

阅读文档我发现,默认情况下,Docker使用JSON File日志记录驱动程序。

  

默认情况下,Docker捕获所有容器的标准输出(和标准错误),并使用JSON格式将其写入文件中

所以,如果我在做

docker run -it --name log1 alpine:latest

接着(在容器内部)一个简单的ps -ef,我可以使用docker logs log1在日志中查看命令的结果

现在,我正在保持容器运行。如果在另一个会话中我正在

docker exec -it log1 ps -ef

什么也没有到达日志。

即使

docker exec -it log1 sh

ps -ef(在容器内部)在日志中什么也不产生。

返回第一个会话,所有命令输出将再次记录。

我误会什么?

1 个答案:

答案 0 :(得分:2)

我无法在Docker的网站上找到对此的明确解释,但是对我来说,它像是下面的内容。

首先,当您启动容器(docker run)时,dockder为此分配了主进程(PID 1),并且在该进程不退出的情况下,该容器被认为是活动的。此过程有自己的stdinstdoutstderr,它们已连接到您的控制台(-it标志)。

这些是处理程序,它们由docker守护程序收集并记录。

运行docker exec时,它将在容器中创建新进程,并且该新进程不会继承{的io处理程序(stdinstdoutstderr) {1}}。因此,由PID 1创建的所有新会话似乎都有各自独立的流,没有被守护程序记录。