Команда проверки работоспособности контейнера docker (1.12) (не в файле Docker!)

Версия докеры 1.12, Я получил Dockerfile из здесь

FROM nginx:latest
RUN touch /marker
ADD ./check_running.sh /check_running.sh
RUN chmod +x /check_running.sh
HEALTHCHECK --interval=5s --timeout=3s CMD ./check_running.sh

Я могу проверять обновления и проверки работоспособности с помощью check_running.sh shell script. Здесь check_running.sh script копируется на image, поэтому в этом запущенном контейнере есть.

Теперь, мой вопрос - есть ли способ проверки работоспособности со стороны контейнера и script, также находящийся снаружи.

Я за исключением команды проверки работоспособности, чтобы получить производительность контейнера (зависит от того, что мы написали в script), ЕСЛИ контейнер не работает хорошо, он должен откатиться к предыдущей версии (вид процесса, который контролирует контейнеры, если это не хорошо, он должен вернуться к предыдущему)

Спасибо

5 ответов

есть ли какой-либо способ проверки работоспособности со стороны контейнера и script также находится снаружи.

Вид процесса, который контролирует контейнеры, если он не является хорошим, он должен откатиться к предыдущему

У вас есть несколько вариантов:

  • Снаружи вы запускаете процесс внутри контейнера, чтобы проверить его работоспособность с помощью docker exec. Это может быть любая последовательность команд оболочки. Если вы хотите сохранить свои скрипты вне контейнера, вы можете использовать что-то вроде cat script.sh | docker exec -it container sh -s.
  • Вы проверяете работоспособность контейнера вне контейнера, например. путем поиска процесса, который должен быть запущен внутри контейнера (попробуйте установить профиль безопасности и используйте ps -Zax или попробуйте найти детей демона), или вы может предоставить каждому контейнеру определенный идентификатор пользователя с помощью --user 12345, а затем искать его или, например, подключение к его услугам. Вы должны убедиться, что он работает внутри правильного контейнера. Вы можете получить доступ к файловой системе контейнеров ниже /var/lib/docker/devicemapper/mnt/<hash>/rootfs</hash>.
  • Вы запускаете HEALTHCHECK внутри контейнера и проверяете его работоспособность с помощью docker inspect --format='{{json .State.Health.Status}}' в сочетании с, например, строка в файле Docker: HEALTHCHECK CMD wget -q -s http://google.com, чтобы проверить, что контейнер имеет доступ в Интернет.

Я бы рекомендовал вариант 3, потому что он скорее всего будет более совместим с другими инструментами в будущем.


Только что получил комментарий от . Он ссылался на документацию Docker HealthCheck. Существует опция "проверка работоспособности" для команды docker для "переопределения" значений по умолчанию для dockerfile. Я еще не проверил! Но мне кажется, что я получаю то, что хочу. Будет проверять и обновлять ответ!


Вы можете просмотреть результаты проверки работоспособности, запустив docker inspect в контейнере.

Другой подход, зависящий от вашего приложения, заключается в том, чтобы выявить конечную точку /healthz, которую также проверит проверка работоспособности, таким образом, она может быть запрошена извне или внутренне по мере необходимости.


Команда проверки Docker позволяет просматривать вывод команд, которые преуспевают или выходят из строя

docker inspect --format='{{json .State.Health}}' your-container-name


Это недоступно с опцией Dockerfile HEALTHCHECK, все проверки выполняются внутри контейнера. Для меня это хорошо, так как это позволяет избежать потенциально ненадежного кода, запущенного непосредственно на хосте, и позволяет вам включать зависимости для проверки работоспособности внутри вашего контейнера.

Если вам нужно контролировать свой контейнер снаружи, вам нужно будет использовать другой инструмент или приложение для мониторинга, их довольно много.

licensed under cc by-sa 3.0 with attribution.