我对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
(在容器内部)在日志中什么也不产生。
返回第一个会话,所有命令输出将再次记录。
我误会什么?
答案 0 :(得分:2)
我无法在Docker的网站上找到对此的明确解释,但是对我来说,它像是下面的内容。
首先,当您启动容器(docker run
)时,dockder为此分配了主进程(PID 1
),并且在该进程不退出的情况下,该容器被认为是活动的。此过程有自己的stdin
,stdout
和stderr
,它们已连接到您的控制台(-it
标志)。
这些是处理程序,它们由docker守护程序收集并记录。
运行docker exec
时,它将在容器中创建新进程,并且该新进程不会继承{的io处理程序(stdin
,stdout
和stderr
) {1}}。因此,由PID 1
创建的所有新会话似乎都有各自独立的流,没有被守护程序记录。