Вы создали образ Docker, поместили его в реестр и запустили в производство новый контейнер. Все работает, когда вы отправляетесь домой , но на следующее утро вы получаете отчеты о сбоях. Ваш контейнер все еще работает, но он не обслуживает запросы.
Этот сценарий может быть неприятно знаком операционным группам, работающим с Docker. Вот как использовать функцию проверки работоспособности Docker, чтобы получить точные данные о доступности ваших сервисов.
Проверки работоспособности позволяют контейнеру раскрыть доступность своей рабочей нагрузки. Это не зависит от того, запущен ли контейнер. Если ваша база данных выйдет из строя, ваш сервер API не сможет обрабатывать запросы, даже если его контейнер Docker все еще работает.
Это создает бесполезный опыт во время устранения неполадок. Простой
сообщит, что контейнер доступен. Добавление проверки работоспособности расширяет выходные данные docker ps
docker ps
, чтобы включить истинное состояние контейнера.
Вы настраиваете проверки работоспособности контейнеров в своем
. Он принимает команду, которую демон Docker будет выполнять каждые 30 секунд. Docker использует код выхода команды, чтобы определить работоспособность вашего контейнера:Dockerfile
0
- Контейнер исправен и работает нормально.1
- Контейнер неисправен; рабочая нагрузка может не работать.2
- Этот код состояния зарезервирован Docker и не должен использоваться.Если HEALTHCHECK
присутствует в Dockerfile, вы увидите состояние контейнера в столбце STATUS
при запуске docker ps
.
Работоспособность не проверяется сразу при создании контейнеров. Статус будет отображаться как starting
до выполнения первой проверки. Это дает контейнеру время для выполнения любых задач запуска. Контейнер с пройденной проверкой работоспособности будет отображаться как healthy
; отображается нездоровый контейнер unhealthy
.
Проверки работоспособности контейнеров настраиваются с помощью инструкции
в вашем HEALTHCHECK
Dockerfile
. Вы должны использовать команду проверки работоспособности, подходящую для вашего контейнера. Для веб-серверов
это простой способ выполнить базовую проверку готовности. Проверьте связь с известной конечной точкой, которая должна быть доступна всякий раз, когда ваша служба работает.curl
FROM nginx:latest
HEALTHCHECK CMD curl --fail http://localhost/api/healthcheck || exit 1
В этом примере контейнер будет помечен как неработоспособный, если конечная точка /api/healthcheck
вашего сервера выдала состояние ошибки.
Вы можете использовать
чтобы увидеть вывод команд проверки работоспособности. Это полезно при отладке инструкции docker inspect
.HEALTHCHECK
docker inspect --format='{{json .State.Health}}' my-container
Замените
идентификатором или названием контейнера, который вы хотите проверить. Эти сведения отображаются в выходных данных my-container
docker ps
.
Docker позволяет настраивать частоту проверок работоспособности. Вы также можете изменить критерии, по которым контейнер помечается как неисправный.
Доступны четыре варианта:
--interval
- Установите время между проверками работоспособности. Это позволяет изменить значение по умолчанию 30 секунд. Используйте больший интервал, чтобы увеличить время между проверками. Это помогает, если у вас есть служба с низким приоритетом, где регулярные проверки работоспособности могут повлиять на производительность. Используйте более регулярную частоту для критически важных служб.--start-period
- Установите продолжительность после запуска контейнера, когда проверки работоспособности следует игнорировать. Команда все равно будет запущена, но нездоровый статус не будет засчитан. Это дает контейнерам время для завершения процедур запуска.--retries
- Это позволяет вам потребовать несколько последовательных сбоев, прежде чем контейнер будет помечен как unhealthy
. По умолчанию это 3. Если проверка работоспособности завершилась неудачно, но последующая прошла успешно, контейнер не перейдет в режим unhealthy
. Он станет нерабочим после трех неудачных проверок подряд.--timeout
- Установите тайм-аут для команд проверки работоспособности. Docker будет считать проверку неудачной, если команда не завершится в течение этого периода времени.Параметры передаются в инструкцию
как флаги. Предоставьте их перед командой проверки работоспособности:HEALTHCHECK
HEALTHCHECK --interval=60s --retries=5 CMD curl --fail http://localhost || exit 1
Эта конфигурация предписывает Docker запускать
каждые 60 секунд. Контейнер будет отмечен как неисправный, если пять последовательных тестов имеют ненулевой код выхода.curl
Синтаксис команды HEALTHCHECK
поддерживает либо обычный CMD, либо массив exec
в стиле точки входа. Вы также можете передать NONE вместо CMD, чтобы отключить проверку работоспособности:
HEALTHCHECK NONE
Это позволяет запретить проверки работоспособности базового образа. Каждый оператор
отменяет любые предыдущие инструкции в слоях вашего изображения.HEALTHCHECK
Docker Compose также поддерживает определения проверки работоспособности. Добавьте раздел
в свой сервис :.healthcheck
version: "3"
services:
app:
image: nginx:latest
ports:
- 80:80
healthcheck:
test: curl --fail http://localhost || exit 1
interval: 10s
retries: 5
start_period: 5s
timeout: 10s
Ключ test
определяет команду для запуска. Другие ключи соответствуют параметрам, принятым инструкцией HEALTHCHECK
Dockerfile.
Установка инструкции
упрощает диагностику неисправного контейнера. Вы можете отслеживать готовность вашей рабочей нагрузки независимо от «запущенного» состояния контейнера.HEALTHCHECK
Проверки работоспособности совместимы с любой командой, которая выдает код выхода
или 0
. Вы можете использовать общие команды, такие как 1
и curl
для проверки веб-служб и баз данных. Для более продвинутого управления напишите специальный сценарий и включите его в свои изображенияping