shell - mvn jetty:在docker容器中 fork ?

标签 shell docker jvm-arguments maven-jetty-plugin sigterm

我有一个使用 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/

相关文章:

apache-spark - 来自Docker的Ne​​o4j和Spark的ServiceUnavailableException

java - 使用代理参数从 Java 启动另一个 JVM

bash - expr 命令执行期间的错误信息 : expr: non-integer argument

linux - 扩展特定限制时从 unix 服务器中删除文件

docker - 在 dokku 上运行 docker 镜像

java - 将 JVM 参数添加到 Spring Boot 应用程序

使用 client-auth 的 Java 客户端在代码中工作,但不使用 vm-arguments

linux - 本地文件的 Shell 脚本

mysql - MySQL文件名太长错误

ruby-on-rails - 1 个系统上的 2 个 Docker 项目和 docker-compose 选择了错误的 ruby​​ 版本(除非我重建)