【发布时间】:2016-12-24 02:04:45
【问题描述】:
动机:通过计算一定数量的消息在特定时间范围内流经标准输出,对 docker 容器运行基本健康检查
直接目标:在由docker exec 启动的shell 中,读取从主进程(PID 1)通过管道传输到标准输出的数据
我什至不确定我想要的是否可能。如果是这种情况,我们将非常感谢您解释为什么不这样做——这将有助于增进我的知识。
重现步骤:
启动容器 --
container1docker run -it --name container1 ubuntu bash -c -i "COUNT=0; while true; do echo Keep the dance floor beat going; ((COUNT++)); sleep 1; echo \"Count is: \${COUNT}\"; done;"在另一个终端窗口中,
docker exec在同一个容器中启动另一个进程docker exec -it container1 bash
我能以某种方式tail/print/read PID 1 通过标准输出传递的消息吗?
我知道有一些变通方法——例如通过tee 进行管道传输或以其他方式写入磁盘——但我希望能有灵丹妙药。
【问题讨论】:
-
感谢您的建议,但我无法让该解决方案与我上面提供的复制一起使用。
-
我没有找到快速的解决方案,但您可以查看github.com/gliderlabs/logspout,它“以某种方式”抓取容器的日志输出,通常将其通过管道传输到远程收集器。 (编辑:嗯,我认为这也可以通过 Docker 主机工作,所以它可能不是你想要的)
-
为什么
tee不是一个有效的灵丹妙药?未修改的入口点对您来说是有效解决方案的要求吗?它是否需要在不添加任何额外功能的情况下在容器内工作?如果是这样,您可能正在寻找 unobtanium。