Один хороший способ отслеживать статус вашего контейнера — использовать функцию HealthCheck Docker.
В рамках тестирования последовательных действий при нездоровительном контейнере мне пришлось экспериментировать, как это работает. Я написал небольшое приложение Go, которое отвечает на /Здоровье Запросы, а статус, который он отвечает, настраивается.
Веб-сервер слушает $ Порт (по умолчанию до 8080). Чтобы изменить его состояние, просто сделайте вызов API к одному из поддерживаемых действий. Вы можете либо подключить контейнер для выполнения его, Или если вы сопоставили порт на хосте, вы можете использовать его.
Поддерживаемые действия:
- /саботаж сделает это ответить 500.
- /Timeout сделает это ответить после 20 лет.
- /восстановить Верните его обратно в здоровое состояние, с 200 ответов.
Вы можете найти исходный код здесь Отказ
От докера Документы —
The HEALTHCHECK instruction has two forms:
HEALTHCHECK [OPTIONS] CMD command (check container health by running a command inside the container)
HEALTHCHECK NONE (disable any healthcheck inherited from the base image)
The HEALTHCHECK instruction tells Docker how to test a container to check that it is still working.
This can detect cases such as a web server that is stuck in an infinite loop and unable
to handle new connections, even though the server process is still running.
When a container has a healthcheck specified, it has a health status in addition to its normal status.
This status is initially starting. Whenever a health check passes, it becomes healthy (whatever state
it was previously in). After a certain number of consecutive failures, it becomes unhealthy.
Варианты, которые могут появляться до CMD:
--interval=DURATION (default: 30s) --timeout=DURATION (default: 30s) --start-period=DURATION (default: 0s) --retries=N (default: 3)
Вы можете настроить настройки HealthCheck в Dockerfile или Docker-Compose.yml Отказ В моем примере Я использую его в DockerFile.
Демонстрация
Клонировать репо и построить изображение:
Docker Build. -t Go-HealthcheckerПоднимите контейнер, подождите, пока он не будет здоровым.
- Чтобы изменить ответ HealthCheck, подключитесь к контейнеру и обновите его состояние
В будущем пост блога я поделюсь, как вы можете использовать ПРОВЕРКА ЗДОРОВЬЯ Функция для управления присоединением Docker-Compose Services с более тонким вариантом, например, «Как сделать сервис X начать перед сервисом y».
Оригинал: «https://dev.to/chen/docker-healthcheck-experiments-with-go-web-app-3c3p»