【问题标题】:Set line-buffering in container output在容器输出中设置行缓冲
【发布时间】:2018-05-28 07:28:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: docker openshift output-buffering s2i


    【解决方案1】:

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

    #/bin/bash
    
    exec stdbuf -oL -e0 /usr/local/s2i/run
    

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

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

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

    【讨论】:

    • 我期待相同但没有找到。根据 .s2i/bin/run,我使用多构建映像,其中一个 buildconfig 准备 JAR 文件,但在另一个构建中,我只是将 JAR 从构建器映像复制到 s2i 映像。
    猜你喜欢
    • 2017-01-22
    • 2011-07-24
    • 2012-10-22
    • 1970-01-01
    • 2013-11-29
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多