#docker #cron
Вопрос:
У меня есть скрипт на python, работающий внутри контейнера docker, с API REST внутри контейнера (локальный доступ к порту с 8085)
Все работает отлично (http://{host_ip_address:8085}), но время от времени контейнер перестает отвечать на http-запросы, перезапуск контейнера решает проблему.
Я хотел бы настроить задание CRON на хосте, на котором запущен контейнер, чтобы проверить, что http://localhost:8085 отвечает, и если нет, перезапустите контейнер.
для меня нормально перезапустить все запущенные контейнеры на машине, поэтому команда сбоя может быть:
docker restart $(docker ps -a -q)
Как я могу этого достичь ?
Комментарии:
1. Типичная практика контейнеров заключается в том, что должно быть безопасно останавливать, удалять и воссоздавать контейнеры; хотя это зависит от приложения и означает знание соответствующих
docker run
команд.docker restart
может быть небезопасно, так как это не приводит к сбросу файловой системы контейнера в известное состояние, поэтому, например, существуют распространенные проблемы, связанные с оставлением файлов pid.
Ответ №1:
Отвечая на мой собственный вопрос:
у докера есть HEALTHCHECK
инструкция опросить контейнер с помощью любой команды, которую мы хотим. к сожалению, на момент написания статьи контейнер не перезапустится автоматически, если он не работает.
Вот моя инструкция по проверке работоспособности в файле Dockerfile (приложение предоставляет порт 8085):
HEALTHCHECK --interval=1m --timeout=30s --start-period=45s
CMD curl -f --retry 6 --max-time 5 --retry-delay 10 --retry-max-time 60 "http://localhost:8085" || bash -c 'kill -s 15 -1 amp;amp; (sleep 10; kill -s 9 -1)'