0

我想在 docker 容器中运行(java)应用程序。此应用程序具有更新功能。这会在启动时自动运行,并且可以从(Web)GUI 手动触发。更新下载新文件,然后运行新的可执行文件(使用新的 PID)并自行退出。

通常,我使用exec java -jar MyProgram.jar "$@"in entrypoint.sh。这将在发生更新时停止容器(因为 PID=1 退出)。

仅使用没有的行exec不能正确转发SIGTERM/ SIGKILLfor docker stop。虽然可以按照此处的program.sh说明转发这些信号,但我不知道在发生更新并产生新进程时如何跟踪 PID。

更新:由于我不是应用程序的开发人员,我正在寻找一种无需修改应用程序的解决方案。

更新 2:我发现该应用程序创建了一个MyProgram.pid文件,我可以读取该文件以在 a 的帮助下杀死它,trapprogram.sh上面链接中所述。

4

1 回答 1

0

通常我们将罐子烘烤成图像。如果我们在运行时更新容器中的 jar,当我们停止容器时,我们会丢失这些更改。正常的升级做法是使用新的 jar 更新您的应用程序规范,并使用某种管道将其重建为映像,然后用新的容器替换您的容器。

于 2020-03-21T14:27:13.293 回答