Docker точка входа. sh для самообновляющихся программ - PullRequest
0 голосов
/ 21 марта 2020

Я хочу запустить (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, указанном выше.

1 Ответ

0 голосов
/ 21 марта 2020

Обычно мы печем банки в изображение. Если мы обновляем jar-контейнеры в контейнере во время выполнения, когда мы останавливаем контейнер, мы теряем эти изменения. Обычная практика обновления - обновить приложение spe c новыми jar-файлами и перестроить его в образ с использованием какого-либо конвейера, а затем заменить ваши контейнеры новыми.

...