У меня есть Tomcat, работающий в качестве службы докера в рое.Когда служба запускается, она загружает много данных в память, что может занять в зависимости от объема данных от 10 до 30 минут.
Моя проблема в том, что когда я обновляю службу (order: start-first), старый контейнер останавливается до того, как новый контейнер инициализирует его данные и поэтому не готов к использованию.
Мне показался многообещающим подход к конфигурации проверки работоспособности в моем docker-compose:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/areyouready"]
interval: 10s
timeout: 10s
retries: 30
Проверка работоспособности работает нормально, но старая служба также отключается, а тест возвращает 1 (не работает)) для новой службы.
Я также пытался обработать SIGTERM в своем приложении: запущенная служба получает сигметру и проверяет, должна ли она уже остановиться в зависимости от состояния новой службы:
Runtime.getRuntime().addShutdownHook(new Thread()
{
@Override
public void run()
{
// via db access determine the state of the new started containers, but I don't know
// how to prevent my tomcat from stopping here
}
}
Кроме того, мне не удавалось предотвратить остановку моего кота, но, похоже, это был неправильный путь.
Мое желаемое решение - настроить что-то вроде этого:
update_config:
order: start-first
a-kind-of-stop-condition: ["CMD", "curl", "-f", "http://localhost:8080/areyouready"]
запрос условия должен затем перейти к новому созданному контейнеру, и в случае успеха старый может быть остановлен.
Было бы здорово, если бы вы указали мне правильное направление.
С уважением, Себастьян