在容器输出

时间:2018-05-28 07:28:02

标签: docker openshift output-buffering s2i

我使用Java S2I image作为在Openshift中运行的容器(内部部署)。我的问题是图像的输出是页面缓冲的,oc logs ...没有显示最后的日志。

我可能会调整我的码头图像stdbuf -oL -e0 java ...,但我更愿意坚持使用“#1}官员' image(只是将jar添加到/deployments)。有没有办法减少缓冲(使用行缓冲而不是页面缓冲),或按需刷新输出?

编辑:我似乎可以更新部署配置并在其中传递stdbuf,但这意味着我必须自己编写所有的args。理想的解决方案是通过--tty做Docker,但我无法看到如何在Openshift中以这种方式传递自定义参数。

1 个答案:

答案 0 :(得分:0)

在您的仓库中,尝试创建文件.s2i/bin/run。在其中添加:

#/bin/bash

exec stdbuf -oL -e0 /usr/local/s2i/run

我总是忘记S2I assemblerun脚本在Java S2I映像中的位置,因此您可能需要使用正确的路径替换/usr/local/s2i

添加此文件的作用是它将作为启动命令而不是原始run脚本运行。然后,您可以使用stdbuf运行原始脚本。确保使用exec以便子流程替换当前流程,否则信号将无法正常传播。

即使这可能有效,但我很惊讶日志记录还没有在无缓冲模式下工作。我希望有一种更好的方法可以通过一些Java配置来控制它。