我有一个应用程序,它使用我需要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。
我准备放弃,因为这似乎不可能......
答案 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
。