Используйте пружинный привод с конструктором Docker-Image по умолчанию Spring-Boot

Я использую Spring-Boot 2.4.4 в среде Docker, управляемой файлом docker-compose.yml и визуализируемой с помощью portainer. Я создаю свои образы Docker с помощью встроенного конструктора Spring-Boot (с пакетами paketo-buildpack)

      mvn spring-boot:build-image

Я хочу, чтобы мой контейнер Docker контролировался с помощью пружинного привода. Поэтому я добавляю зависимость maven и получаю желаемый результат, когда запускаю приложение локально и обращаюсь к определенной странице:

      http://localhost:8080/actuator/health

Поскольку я использую встроенный конструктор образов Docker Spring-Boot, у меня нет файла Dockerfile для добавления точки работоспособности. Когда я добавляю healtheck в свой docker-compose.yml, команда wget не обнаруживается:

          healthcheck:
      test: wget --spider --quiet 'http://localhost:8080/actuator/health/' || exit 1
      interval: 10s
      timeout: 3s
      retries: 10
      start_period: 10s

Что я делаю не так? Я не нашел никакой документации в Интернете. Я думал, что Spring-Boot сможет обнаружить пружинный привод сам по себе, но я думаю, что это не так.

2 ответа

Ни один wget ни curlКоманды включены в базовый образ, который используется для запуска приложения Spring Boot. Возможно, вы можете смонтировать еще один том утилит: qaru.site/questions/435 / ...

Или просто напишите другое легкое Java-приложение для запроса актуатора работоспособности, сопоставьте результат с кодом выхода. Затем упакуйте его в jar, создайте еще один образ с пакетом jar на основе образа приложения Spring Boot. После этого проверка работоспособности может выполняться с java -jar команда.

Вы можете переключить построитель, который используется при упаковке образа контейнера. См. Параметры настройки изображения здесь .

Строитель по умолчанию paketobuildpacks/builder:base, в котором есть образ запуска, не содержащий или. Вы можете переключить строителя на paketobuildpacks/builder:full и у вас должно быть (возможно, также wget, Я не уверен, что у меня в голове).

Компромисс здесь заключается в том, что образ запуска больше, поэтому размер ваших созданных образов будет увеличиваться. Полный образ содержит довольно много материала и весит около 1 ГБ, по сравнению с примерно 100 МБ для базового образа.

Docker умеет загружать слои, поэтому, если у вас есть 50 приложений, основанных на одном и том же полном образе компоновщика, это не приведет к загрузке 50G. Docker (и другие среды выполнения контейнеров) загружают только те слои, которых у него еще нет, так что дополнительный гиг в основном загружается один раз. В конечном итоге вам нужно будет определить, насколько удобство использования curl стоит дополнительного размера на изображениях.

Другие вопросы по тегам