Шпаргалка для docker healthcheck
Обновлено:
Опубликовано:
Данная инструкция представляет из себя шпаргалку по созданию сценариев проверки работоспособности различных сервисов, работающих в контейнерах и запускаемых через docker-compose.
Описание синтаксиса healthcheck
Базы данных
Веб-хуки
Веб-серверы
Различные приложения
Дополнительные материалы
Синтаксис
Общий синтаксис для добавления healthcheck в docker-compose:
healthcheck:
test: ["CMD-SHELL или CMD", "<команда для проверки>"]
interval: Ns
timeout: Ns
retries: N
start_period: Ns
start_interval: Ns
* где:
- test — команда для тестирования.
- сначала мы указываем способ запуска команды с помощью CMD или CMD-SHELL. CMD вызывает команду напрямую через системный вызов exec, а CMD-SHELL через /bin/sh -c. На практике, CMD-SHELL удобнее, но если образ сильно урезан и в нем нет шела, то приходится использовать CMD. Если вы используете формат списка с CMD, то каждый аргумент команды должен быть отдельным элементом списка.
- вторым аргументом идет сама команда. Она должна вернуть 0, чтобы docker посчитал, что проверка пройдена.
- interval — как часто делать повторы проверок.
- timeout — сколько ждать ответа от команды.
- retries — сколько раз повторить команду, прежде чем решить, что сервис не работает.
- start_period — через какое время после старта контейнера начать делать проверку.
- start_interval — пока действует start_period, проверки могут выполняться чаще, чтобы быстрее перейти в режим «Здоров». Обратите внимание, что он появился в Docker Compose 2.24.0 и Docker Engine 25.0+. На более старых версиях этот параметр вызовет ошибку.
Например:
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/health"]
interval: 30s # Проверять раз в полминуты
timeout: 10s # Ждать ответа не дольше 10 сек
retries: 3 # Сдаться после 3 неудач подряд
start_period: 40s # Дать 40 секунд на "разогрев" при старте
start_interval: 5s # Во время разогрева проверять каждые 5 секунд
Базы данных
В данном разделе рассмотрим примеры только по проверкам различных серверов баз данных.
PostgreSQL
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
interval: 5s
timeout: 5s
retries: 5
MySQL
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
MariaDB
healthcheck:
test: ["CMD-SHELL", "mariadb-admin ping -h 127.0.0.1 -u${MARIADB_USER} -p${MARIADB_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
MongoDB
healthcheck:
test: ["CMD-SHELL", "mongosh --port ${MG_PORT} --quiet --eval \"db.runCommand('ping').ok\""]
interval: 10s
timeout: 5s
retries: 5
Elasticsearch
healthcheck:
test: ["CMD-SHELL", "curl -f -u elastic:${ELASTIC_PASSWORD} http://127.0.0.1:9200/_cluster/health?local=true"]
interval: 20s
timeout: 10s
retries: 5
Веб-запросы и хуки
Это проверки, которые выполняются с помощью отправки http запросов, как правило, с помощью curl или wget.
Wget
healthcheck:
test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://127.0.0.1:3000"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
Curl
healthcheck:
test: ["CMD-SHELL", "curl -f http://127.0.0.1:3000"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
Веб-серверы
Проверки для различных веб-серверов.
Traefik
healthcheck:
test: ["CMD-SHELL", "traefik healthcheck"]
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
Caddy
healthcheck:
test: ["CMD-SHELL", "curl -fI http://127.0.0.1:2019/metrics"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
Nginx
healthcheck:
test: ["CMD-SHELL", "curl -f http://127.0.0.1/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
Различные приложения
Приложения, у которых могут быть свои команды для проверки работоспособности.
Rocket.Chat
healthcheck:
test: ["CMD-SHELL", "node -e \"require('http').get('http://localhost:3000/api/info', (res) => { if (res.statusCode === 200) process.exit(0); else process.exit(1); })\""]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
GLPI
healthcheck:
test: ["CMD-SHELL", "curl -f http://127.0.0.1/status.php"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
PHP-FPM
healthcheck:
test: ["CMD-SHELL", "php-fpm -t"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
Читайте также
Дополнительные инструкции, которые могут быть полезными: