我使用Java S2I image作为在Openshift中运行的容器(内部部署)。我的问题是图像的输出是页面缓冲的,oc logs ...
没有显示最后的日志。
我可能会调整我的码头图像stdbuf -oL -e0 java ...
,但我更愿意坚持使用“#1}官员' image(只是将jar添加到/deployments
)。有没有办法减少缓冲(使用行缓冲而不是页面缓冲),或按需刷新输出?
编辑:我似乎可以更新部署配置并在其中传递stdbuf
,但这意味着我必须自己编写所有的args。理想的解决方案是通过--tty
做Docker,但我无法看到如何在Openshift中以这种方式传递自定义参数。
答案 0 :(得分:0)
在您的仓库中,尝试创建文件.s2i/bin/run
。在其中添加:
#/bin/bash
exec stdbuf -oL -e0 /usr/local/s2i/run
我总是忘记S2I assemble
和run
脚本在Java S2I映像中的位置,因此您可能需要使用正确的路径替换/usr/local/s2i
。
添加此文件的作用是它将作为启动命令而不是原始run
脚本运行。然后,您可以使用stdbuf
运行原始脚本。确保使用exec
以便子流程替换当前流程,否则信号将无法正常传播。
即使这可能有效,但我很惊讶日志记录还没有在无缓冲模式下工作。我希望有一种更好的方法可以通过一些Java配置来控制它。