Вопрос проверяет понимание fallback-механизма Docker и последствий некорректного завершения приложений.
Если контейнер не завершился после получения SIGTERM, Docker отправляет ему SIGKILL. Этот сигнал принудительно завершает процесс без возможности обработки. Контейнер будет остановлен в любом случае. Такое завершение может привести к потере данных. Поэтому приложения должны корректно реагировать на SIGTERM.
Docker всегда гарантирует, что контейнер будет остановлен, даже если приложение внутри него зависло или игнорирует сигналы.
SIGKILL — это сигнал, который немедленно завершает процесс без возможности перехвата.
После отправки SIGTERM Docker:
ждёт заданное время (--time);
не проверяет, «что делает» процесс внутри.
Если таймаут истёк — считается, что корректное завершение невозможно.
Docker отправляет SIGKILL:
процесс завершается мгновенно;
cleanup-код не выполняется;
данные в памяти теряются.
Принудительное завершение может привести к:
потерянным данным;
неконсистентному состоянию;
оборванным соединениям.
Особенно опасно для:
баз данных;
файловых операций;
stateful-сервисов.
Рекомендуемые практики:
быстро обрабатывать SIGTERM;
не выполнять долгие блокирующие операции при shutdown;
корректно настраивать --time.
Если контейнер не реагирует на SIGTERM, Docker использует SIGKILL как крайнюю меру. Это гарантирует остановку, но может быть опасно для данных, поэтому приложения должны уметь корректно завершаться.