Перезапуск контейнера с указанным сигналом
На этом шаге вы узнаете, как перезапустить контейнер Docker, отправив определенный сигнал основному процессу контейнера. Хотя команда docker restart
по умолчанию отправляет сигнал остановки (SIGTERM
) с последующим сигналом принудительного завершения (SIGKILL
) после таймаута, вам может потребоваться отправить другой сигнал в зависимости от приложения, работающего в контейнере. Этого можно достичь, сначала остановив контейнер с определенным сигналом с помощью docker stop
, а затем запустив его снова командой docker start
.
Снова воспользуемся контейнером my-nginx
. Убедимся, что он запущен.
docker ps
Если он не запущен, запустим его:
docker start my-nginx
Теперь остановим контейнер, отправив сигнал SIGKILL
. Этот сигнал немедленно завершает процесс без возможности выполнения каких-либо операций очистки.
docker stop -s SIGKILL my-nginx
Вы увидите имя контейнера, и если выполнить docker ps
, контейнер больше не будет отображаться в списке.
docker ps
Контейнер теперь остановлен. Для его перезапуска просто запустим его снова.
docker start my-nginx
Теперь контейнер должен снова работать. Проверим с помощью docker ps
.
docker ps
Вы должны увидеть my-nginx
в списке со статусом Up
.
Хотя SIGKILL
является принудительным сигналом остановки, вы также можете отправлять другие сигналы, такие как SIGHUP
или SIGINT
, если ваше приложение настроено на их обработку для корректного завершения или перезагрузки. Однако конфигурация контейнера nginx
по умолчанию корректно обрабатывает сигнал SIGTERM
.
Остановим контейнер еще раз, на этот раз используя сигнал SIGTERM
по умолчанию (который используется в docker stop
, если сигнал не указан явно).
docker stop my-nginx
Проверим, что он остановлен:
docker ps
Теперь запустим его в последний раз.
docker start my-nginx
Убедимся, что он работает:
docker ps
Комбинируя команды docker stop -s <сигнал>
и docker start
, вы получаете более детальный контроль над процессом остановки контейнера перед его перезапуском.