Перезапуск нездорового контейнера докеров на основе проверки здоровья
Я использую 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 автоматически отключает нездоровый контейнер и запускает новый контейнер для поддержания количества контейнеров, как указано в счете реплики службы.