Шпаргалка для docker healthcheck

Обновлено Обновлено: Опубликовано Опубликовано:

Данная инструкция представляет из себя шпаргалку по созданию сценариев проверки работоспособности различных сервисов, работающих в контейнерах и запускаемых через docker-compose.

Синтаксис

Общий синтаксис для добавления 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

Читайте также

Дополнительные инструкции, которые могут быть полезными:

1. Установка Docker на Linux.

2. Шпаргалка по работе с docker-compose.

3. Создание собственного образа Docker.

# DevOps # Контейнеризация
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет

Дмитрий Моск
— IT-специалист.
Настройка серверов, услуги DevOps.

Заказать настройку контейнеризации

Нужна бесплатная консультация?

Мини-инструкции

Шпаргалка для docker healthcheck

Как получить бесплатный VDS-сервер в SpaceWeb

Как установить и работать с различными LLM моделями через Ollama на Linux

Как установить и настроить SambaDC (Active Directory) на Linux Ubuntu

Как установить систему для удаленного управления устройствами MeshCentral на Linux

Установка и настройка кластера Ceph на Ubuntu для организации дискового хранилища

Настройка Dovecot Solr для ускорения поиска по почте

Другие инструкции

Все статьи

Нужна помощь? Пишите:






Реклама