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 脚本将永远持续 运行
我有一个使用 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
.