0

我将Java S2I 映像用于在 Openshift(本地)中运行的容器。我的问题是图像的输出是页面缓冲的,oc logs ...没有显示最后的日志。

我可能会启动我的 docker 镜像,stdbuf -oL -e0 java ...但我更愿意坚持使用“官方”镜像(只需将 jar 添加到/deployments. 有什么方法可以减少缓冲(使用行缓冲而不是页面缓冲),或者按需刷新输出?

编辑:似乎我可以更新部署配置并stdbuf在那里传递,但这意味着我必须自己编写所有参数。理想的解决方案是传递--ttyDocker,但我看不出如何在 Openshift 中以这种方式传递自定义参数。

4

1 回答 1

0

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

#/bin/bash

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

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

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

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

于 2018-05-28T09:19:31.140 回答