
Этот вопрос уже задавался ранее.здесь на SOиздесь на Reddit. Однако ответ на этот вопрос так и не получен.
У меня есть наши Atlassian сервисы, работающие внутри контейнеров Docker. Однако мне интересно, что происходит, когда я даю shutdown
командугостья. Он пытается изящно завершить работу контейнеров или пытается немедленно их убить? Каким-то образом я, похоже, не могу найти реальных ресурсов по этому вопросу, возможно, потому что я новичок в Docker.
Представьте себе следующее:
- У меня есть работающие контейнеры
- Я даю
shutdown
команду на выключениегостья безявно выдающийdocker stop
Что делает docker в таком случае? Могу ли я безопасно выполнить команду shutdown
и ожидать, что мои контейнеры будут корректно завершены до того, как что-либо произойдет?
В моем случае я использую экземпляр Ubuntu Server 19.04, если это имеет значение, но вопрос касается более общего сценария / охватывающего основные дистрибутивы.
решение1
Ваши контейнеры должны получить сигнал SIGTERM, как и все другие процессы в системе.
Загвоздка в том, что SIGTERM получает главный процесс в контейнере (тот, который запущен ENTRYPOINT). Если контейнер запускает скрипт для запуска двоичного файла, это важно для exec
двоичного файла, чтобы он стал процессом контейнера, в противном случае SIGTERM получает интерпретатор оболочки, который обычно не пересылает его дочернему процессу.
AFAIK docker stop
сначала пытается отправить SIGTERM на контейнер и ожидает, что он выйдет в течение 10 секунд, если нет, то отправляет SIGKILL. Так что если ваши контейнеры быстро останавливаются, то все docker stop
должно быть в порядке.
решение2
Есть теоретический подход (от @xenoid), и практический.
Выполните команду выключения сервера и посмотрите, что произойдет.
Консоль.Хотя сеть может быть немедленно отключена, последовательность выключения все еще может занять некоторое время. Наблюдайте с консоли (некоторые хостинг-провайдеры предоставляют виртуальную консоль), как это происходит - сколько времени на самом деле занимает последовательность выключения, и что происходит между тем?
Журналы.Из того, что я видел, контейнер базы данных часто вызывает беспокойство. Будет ли он убит или изящно завершен? Правда в журналах. Внимательно их изучите. Если вы загрузите систему и увидите эти журналы с временными метками выключения, то все будет хорошо:
.
2023-08-11 14:43:21 0 [Note] InnoDB: Starting shutdown...
[...]
2023-08-11 14:43:21 0 [Note] mariadbd: Shutdown complete
- Конфигурация времени выключения.Вы также можете изучить подробнее, как изменить параметры времени перезагрузки. Смотрите
man systemd-system.conf
и проверьте этот параграф:DefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultTimeoutAbortSec=, DefaultRestartSec=
. Значение по умолчанию — 90 секунд.