Перезапуск нездорового контейнера докеров на основе проверки здоровья

Я использую Docker version 17.09.0-ce Я вижу, что контейнеры помечены как нездоровые случаи сбоев проверки работоспособности.

Есть ли возможность перезапустить контейнер, вместо того чтобы держать контейнер в нездоровом виде.

Ответ 1

Перезапуск функции нежирного контейнера был в оригинальном PR (https://github.com/moby/moby/pull/22719), но был удален после обсуждения и считается выполненным позже как усовершенствование RestartPolicy.

В этот момент вы можете использовать это обходное решение для автоматического перезапуска незаживающих контейнеров: https://hub.docker.com/r/willfarrell/autoheal/

Вот образец файла:

version: '2'
services:
  autoheal:
    restart: always
    image: willfarrell/autoheal
    environment:
      - AUTOHEAL_CONTAINER_LABEL=all
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Просто выполните docker-compose up -d на этом

Ответ 2

Докер имеет несколько способов получить подробную информацию о состоянии контейнера. Вы можете настроить проверки работоспособности и частоту их выполнения. Кроме того, проверки работоспособности могут выполняться в приложениях, запущенных внутри контейнера, например http (это будет использовать параметр curl --fail.) Вы можете просмотреть событие health_status чтобы получить подробную информацию.

Для получения подробной информации о нездоровом контейнере команда инспекции пригодится, docker inspect --format='{{json.State.Health}}' container-name (см. Https://blog.newrelic.com/2016/08/24/docker-health-check-instruction/ для более подробной информации.)

Вы должны разрешить условие ошибки, вызвав "нездоровый" тег (когда команда проверки работоспособности запускается и получает код выхода из 1). Это может потребовать или не потребовать перезагрузки Docker контейнера в зависимости от ошибки. Если вы запускаете/перезапускаете свои контейнеры автоматически, то либо улавливание ошибок запуска, либо их регистрация, и состояние проверки работоспособности могут быстро устранять ошибки. Проверьте ссылку, если вы заинтересованы в автозапуске.

Ответ 3

Для автономных контейнеров Docker не имеет встроенной интеграции для перезапуска контейнера при сбое проверки работоспособности, хотя мы можем добиться того же, используя события Docker и скрипт. Проверка здоровья лучше интегрирована с Роем. Когда проверка работоспособности интегрирована с Swarm, когда контейнер в службе вреден для здоровья, Swarm автоматически отключает нездоровый контейнер и запускает новый контейнер для поддержания количества контейнеров, как указано в счете реплики службы.

Ответ 4

Согласно https://codeblog.dotsandbrackets.com/docker-health-check/

Создайте контейнер и добавьте "restart: always".

При использовании очков здоровья обратите внимание на следующие моменты:

Для автономных контейнеров Docker не имеет встроенной интеграции для перезапуска контейнера при сбое проверки работоспособности, хотя мы можем добиться того же, используя события Docker и скрипт. Проверка здоровья лучше интегрирована с Роем. Когда проверка работоспособности интегрирована с Swarm, когда контейнер в службе вреден для здоровья, Swarm автоматически отключает нездоровый контейнер и запускает новый контейнер для поддержания количества контейнеров, как указано в счете реплики службы.