mvn jetty:在docker容器内运行分叉?

时间:2017-02-05 03:48:17

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

我有一个应用程序,它使用我需要dockerize的jetty maven插件"run-forked" goal。发生的事情是,maven启动,容器只存在大约10秒,然后当maven退出后,它会在子JVM进程之后退出。

我调查过很多选择。我认为可能有用的一个选择是设置" waitForChild"真实然后 做这样的事情:

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

我准备放弃,因为这似乎不可能......

1 个答案:

答案 0 :(得分: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脚本将继续运行