【问题标题】:mvn jetty:run-forked inside a docker container?mvn jetty:run-forked 在 docker 容器内?
【发布时间】:2017-06-22 05:54:41
【问题描述】:

我有一个使用 jetty maven 插件 "run-forked" goal 的应用程序,我需要对它进行 dockerize。发生的情况是 maven 启动,容器仅存在大约 10 秒,然后在 maven 分叉子 JVM 进程后退出时死亡。

我研究了许多选项。我认为可能可行的一个选项是将“waitForChild”设置为true,然后 做这样的事情:

ENTRYPOINT [ "/entrypoint.sh" ]
CMD [ "jetty:run-forked > /tmp/log 2>&1" ]

但是,尽管这使 maven 保持运行,但图像并没有构建,因为Docker waits for a SIGTERM

如果你想知道为什么我需要使用 jetty:run-forked,那是因为代码需要 static linked library that needs a JVM

我准备认输,因为这似乎是不可能的......

【问题讨论】:

    标签: shell docker jvm-arguments maven-jetty-plugin sigterm


    【解决方案1】:

    我不完全确定你的 java 设置,但一个有效的技巧是这样的:

    在您的 dockerfile 中,添加一个自定义脚本,如下所示:

    COPY myscript.sh /bin/myscript.sh # Remember to make this executable!
    

    然后编辑您的 ENTRYPOINT 以反映这一点:

    ENTRYPOINT ["/bin/myscript.sh"]
    

    您的myscript.sh 可能看起来像这样:

    #!/bin/bash
    
    # Run Java/mvn commands here
    ...
    jetty:run-forked > /tmp/log 2>&1
    
    # Throw in a shell command that simply executes forever
    tail -f /dev/null
    

    这将确保即使在您的 jetty/mvn 东西产生另一个进程并退出之后,您的容器也能继续运行,因为它不再是容器中的 PID 1,myscript.sh shell 脚本是。由于tail -f,此shell 脚本将继续永远运行。

    【讨论】:

    • 有效!谢谢你。绝对是一个巧妙的技巧,不仅如此,它还清晰明了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2014-10-22
    • 2013-04-08
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多