我有一个使用 docker Maven插件"run-forked" goal的应用程序。发生的事情是maven启动,该容器仅存在约10秒钟,然后在派生子JVM进程后maven退出时死亡。
我研究了许多选择。我认为可能可行的一个选项是将“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。
我准备扔毛巾,因为这似乎不可能...
最佳答案
我不确定您的Java设置如何,但是有效的巧妙技巧是这样的:
在您的dockerfile中,添加一个自定义脚本,如下所示:
COPY myscript.sh /bin/myscript.sh # Remember to make this executable!
然后编辑您的ENTRYPOINT以反射(reflect)该信息:
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东西产生另一个进程并退出后也能继续运行,因为
myscript.sh
Shell脚本不再是容器中的PID 1。由于tail -f
,此shell脚本将继续永远运行。
关于shell - mvn jetty:在docker容器中 fork ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42048328/