2017-02-05 107 views
1

我有一個應用程序使用我需要dockerize的jetty maven插件"run-forked" goal。會發生什麼是maven啓動,容器只存在約10秒,然後在maven退出子JVM進程後退出時死掉。mvn碼頭:碼頭集裝箱內運行分叉?

我調查了很多選項。我覺得可能工作的一個選項是「waitForChild」設置爲true,然後 做這樣的事情:

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

但是,儘管這樣下去行家運行時,圖像不建,因爲Docker waits for a SIGTERM

如果您想知道爲什麼我需要使用jetty:run-forked,那是因爲代碼需要static linked library that needs a JVM

我準備認輸了,因爲這似乎是不可能的......

回答

1

我不能完全肯定你的java成立,但一個可行的絕招是這樣的:

在你dockerfile,添加自定義腳本,像這樣:

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

然後編輯您的入口點,以反映:

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 

這將確保你的容器保持運行即使您的碼頭/ MVN東西產生另一個過程並退出,因爲它不再是在容器內PID 1,外殼腳本是myscript.sh。由於tail -f,此shell腳本將繼續運行。

+0

它的工作原理!謝謝。絕對是一個巧妙的訣竅,不僅如此,它清晰而簡單。 –