Я хочу запустить (java) приложение в docker контейнере. Это приложение имеет функциональность update . Это запускается автоматически при запуске и может быть вызвано вручную из (веб) GUI. Обновление загружает новые файлы, затем запускает новый исполняемый файл (с новым PID) и завершает работу.
Обычно я использую exec java -jar MyProgram.jar "$@"
в entrypoint.sh
. Это остановит контейнер, когда произойдет обновление (поскольку PID = 1 завершен).
Простое использование строки без exec
не приведет к правильной пересылке SIGTERM
/ SIGKILL
для docker stop
. Хотя пересылка этих сигналов возможна, как объяснено здесь, в program.sh
, я не знаю, как отслеживать PID, когда происходит обновление и возникает новый процесс.
Обновление: Поскольку я не являюсь разработчиком приложения, я ищу решение без изменения приложений.
Обновление 2: I обнаружил, что приложение создает файл MyProgram.pid
, который я могу прочитать, чтобы уничтожить его с помощью trap
, как объяснено в program.sh
, указанном выше.