我想在 docker 容器中运行(java)应用程序。此应用程序具有更新功能。这会在启动时自动运行,并且可以从(Web)GUI 手动触发。更新下载新文件,然后运行新的可执行文件(使用新的 PID)并自行退出。
通常,我使用exec java -jar MyProgram.jar "$@"
in entrypoint.sh
。这将在发生更新时停止容器(因为 PID=1 退出)。
仅使用没有的行exec
不能正确转发SIGTERM
/ SIGKILL
for docker stop
。虽然可以按照此处的program.sh
说明转发这些信号,但我不知道在发生更新并产生新进程时如何跟踪 PID。
更新:由于我不是应用程序的开发人员,我正在寻找一种无需修改应用程序的解决方案。
更新 2:我发现该应用程序创建了一个MyProgram.pid
文件,我可以读取该文件以在 a 的帮助下杀死它,trap
如program.sh
上面链接中所述。