mvn jetty:run-forked 在 docker 容器内?

mvn jetty:run-forked inside a docker container?

我有一个使用 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,那是因为代码需要 .

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

我不完全确定你的 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

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

,此 shell 脚本将永远持续 运行