Настройка политик перезапуска контейнеров (Container Restart Policies)
Docker позволяет настраивать политики перезапуска (restart policies) для контейнеров. Политика перезапуска определяет, должен ли контейнер автоматически перезапускаться демоном Docker (Docker daemon) после его завершения. Это важная функция для обеспечения доступности ваших приложений.
В этом шаге вы узнаете, как настраивать политики перезапуска для контейнеров Docker.
Сначала давайте остановим и удалим предыдущий контейнер my-nginx, чтобы начать с чистого листа.
docker stop my-nginx
docker rm my-nginx
Теперь давайте запустим новый контейнер Nginx с политикой перезапуска always.
docker run -d --name my-nginx-always --restart=always -p 80:80 nginx
Флаг --restart=always указывает Docker всегда перезапускать контейнер, если он останавливается, независимо от кода выхода. Он также перезапустит контейнер при запуске демона Docker.
Убедитесь, что контейнер запущен:
docker ps
Теперь давайте смоделируем сбой контейнера, остановив его вручную.
docker stop my-nginx-always
Подождите несколько секунд и снова проверьте статус контейнера:
docker ps
Вы должны увидеть, что контейнер my-nginx-always был автоматически перезапущен демоном Docker. В столбце STATUS будет указано, что он находится в состоянии Up в течение короткого периода времени.
Другие распространенные политики перезапуска включают:
no: Не перезапускать контейнер автоматически (по умолчанию).
on-failure: Перезапускать контейнер только в том случае, если он завершается с ненулевым кодом выхода (указывающим на ошибку). Вы можете дополнительно указать максимальное количество попыток перезапуска (например, on-failure:5).
unless-stopped: Всегда перезапускать контейнер, если он не был явно остановлен пользователем или демон Docker не был остановлен.
Давайте попробуем политику on-failure. Остановите и удалите текущий контейнер:
docker stop my-nginx-always
docker rm my-nginx-always
Запустите новый контейнер с политикой on-failure:
docker run -d --name my-nginx-on-failure --restart=on-failure -p 80:80 nginx
Убедитесь, что он запущен:
docker ps
Теперь давайте смоделируем сбой. Мы можем сделать это, выполнив команду внутри контейнера, которая завершается с ненулевым статусом.
docker exec my-nginx-on-failure sh -c "exit 1"
Проверьте статус контейнера через несколько секунд:
docker ps
Контейнер должен был быть автоматически перезапущен, потому что он завершился с ненулевым статусом.
Политики перезапуска — это мощный инструмент для обеспечения устойчивости ваших контейнеризированных приложений. Настроив соответствующую политику, вы можете автоматизировать восстановление контейнеров, которые неожиданно останавливаются.