Google-cloud-run не будет запускать веб-образ Springboot, созданный Paketo Buildpacks

Я не могу запустить веб-образ весенней загрузки, созданный с помощью пакетов Paketo Buildpacks с помощью плагина Spring-Maven. Ошибка говорит:

Deploying container to Cloud Run service [bff] in project [merchantloans] region [us-central1]
X  Deploying...                                                                                                                                                                                                                          
  -  Creating Revision...                                                                                                                                                                                                                
  .  Routing traffic...
Deployment failed                                                                                                                                                                                                                        
ERROR: (gcloud.run.deploy) Revision 'bff-00002-wtm' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.

Есть идеи? Даже если я попытаюсь установить переменную среды PORT=8080 в локальном докере, порт 8080 не будет открыт. Только если я использую аргумент docker -p, это сработает, но, похоже, это недоступно в google-cloud-run.

[INFO] Building image 'docker.io/library/bff:1.0-SNAPSHOT'
[INFO]
[INFO]  > Pulling builder image 'docker.io/paketobuildpacks/builder-jammy-base:latest' 100%
[INFO]  > Pulled builder image 'paketobuildpacks/builder-jammy-base@sha256:94593b2ad54362e1256da43631661d3dad936a177609a3d297fc638e87c6ee91'
[INFO]  > Pulling run image 'docker.io/paketobuildpacks/run-jammy-base:latest' 100%
[INFO]  > Pulled run image 'paketobuildpacks/run-jammy-base@sha256:c2bc9ac828642aee2376a649ef5affd6912507c739247a40086bcae6d62a8b41'
[INFO]  > Executing lifecycle version v0.18.5
[INFO]  > Using build cache volume 'pack-cache-65773be3b4d2.build'
[INFO]
[INFO]  > Running creator
[INFO]     [creator]     ===> ANALYZING
[INFO]     [creator]     Restoring data for SBOM from previous image
[INFO]     [creator]     ===> DETECTING
[INFO]     [creator]     6 of 26 buildpacks participating
[INFO]     [creator]     paketo-buildpacks/ca-certificates   3.6.7
[INFO]     [creator]     paketo-buildpacks/bellsoft-liberica 10.5.2
[INFO]     [creator]     paketo-buildpacks/syft              1.44.0
[INFO]     [creator]     paketo-buildpacks/executable-jar    6.8.3
[INFO]     [creator]     paketo-buildpacks/dist-zip          5.6.8
[INFO]     [creator]     paketo-buildpacks/spring-boot       5.27.8
[INFO]     [creator]     ===> RESTORING
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/ca-certificates:helper" from app image
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:helper" from app image
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:java-security-properties" from app image
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jre" from app image
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/syft:syft" from cache
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:helper" from app image
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:spring-cloud-bindings" from app image
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:web-application-type" from app image
[INFO]     [creator]     Restoring data for "paketo-buildpacks/syft:syft" from cache
[INFO]     [creator]     Restoring data for SBOM from cache
[INFO]     [creator]     ===> BUILDING
[INFO]     [creator]
[INFO]     [creator]     Paketo Buildpack for CA Certificates 3.6.7
[INFO]     [creator]       https://github.com/paketo-buildpacks/ca-certificates
[INFO]     [creator]       Launch Helper: Reusing cached layer
[INFO]     [creator]     
[INFO]     [creator]     Paketo Buildpack for BellSoft Liberica 10.5.2
[INFO]     [creator]       https://github.com/paketo-buildpacks/bellsoft-liberica
[INFO]     [creator]       Build Configuration:
[INFO]     [creator]         $BP_JVM_JLINK_ARGS           --no-man-pages --no-header-files --strip-debug --compress=1  configure custom link arguments (--output must be omitted)
[INFO]     [creator]         $BP_JVM_JLINK_ENABLED        false                                                        enables running jlink tool to generate custom JRE
[INFO]     [creator]         $BP_JVM_TYPE                 JRE                                                          the JVM type - JDK or JRE
[INFO]     [creator]         $BP_JVM_VERSION              17                                                           the Java version
[INFO]     [creator]       Launch Configuration:
[INFO]     [creator]         $BPL_DEBUG_ENABLED           false                                                        enables Java remote debugging support
[INFO]     [creator]         $BPL_DEBUG_PORT              8000                                                         configure the remote debugging port
[INFO]     [creator]         $BPL_DEBUG_SUSPEND           false                                                        configure whether to suspend execution until a debugger has attached
[INFO]     [creator]         $BPL_HEAP_DUMP_PATH                                                                       write heap dumps on error to this path
[INFO]     [creator]         $BPL_JAVA_NMT_ENABLED        true                                                         enables Java Native Memory Tracking (NMT)
[INFO]     [creator]         $BPL_JAVA_NMT_LEVEL          summary                                                      configure level of NMT, summary or detail
[INFO]     [creator]         $BPL_JFR_ARGS                                                                             configure custom Java Flight Recording (JFR) arguments
[INFO]     [creator]         $BPL_JFR_ENABLED             false                                                        enables Java Flight Recording (JFR)
[INFO]     [creator]         $BPL_JMX_ENABLED             false                                                        enables Java Management Extensions (JMX)
[INFO]     [creator]         $BPL_JMX_PORT                5000                                                         configure the JMX port
[INFO]     [creator]         $BPL_JVM_HEAD_ROOM           0                                                            the headroom in memory calculation
[INFO]     [creator]         $BPL_JVM_LOADED_CLASS_COUNT  35% of classes                                               the number of loaded classes in memory calculation
[INFO]     [creator]         $BPL_JVM_THREAD_COUNT        250                                                          the number of threads in memory calculation
[INFO]     [creator]         $JAVA_TOOL_OPTIONS                                                                        the JVM launch flags
[INFO]     [creator]         Using Java version 17 extracted from MANIFEST.MF
[INFO]     [creator]       BellSoft Liberica JRE 17.0.10: Reusing cached layer
[INFO]     [creator]       Launch Helper: Reusing cached layer
[INFO]     [creator]       Java Security Properties: Reusing cached layer
[INFO]     [creator]
[INFO]     [creator]     Paketo Buildpack for Syft 1.44.0
[INFO]     [creator]       https://github.com/paketo-buildpacks/syft
[INFO]     [creator]         Downloading from https://github.com/anchore/syft/releases/download/v0.104.0/syft_0.104.0_linux_amd64.tar.gz
[INFO]     [creator]         Verifying checksum
[INFO]     [creator]         Writing env.build/SYFT_CHECK_FOR_APP_UPDATE.default
[INFO]     [creator]
[INFO]     [creator]     Paketo Buildpack for Executable JAR 6.8.3
[INFO]     [creator]       https://github.com/paketo-buildpacks/executable-jar
[INFO]     [creator]       Command "packages" is deprecated, use `syft scan` instead
[INFO]     [creator]       Class Path: Contributing to layer
[INFO]     [creator]         Writing env/CLASSPATH.delim
[INFO]     [creator]         Writing env/CLASSPATH.prepend
[INFO]     [creator]       Process types:
[INFO]     [creator]         executable-jar: java org.springframework.boot.loader.launch.JarLauncher (direct)
[INFO]     [creator]         task:           java org.springframework.boot.loader.launch.JarLauncher (direct)
[INFO]     [creator]         web:            java org.springframework.boot.loader.launch.JarLauncher (direct)
[INFO]     [creator]
[INFO]     [creator]     Paketo Buildpack for Spring Boot 5.27.8
[INFO]     [creator]       https://github.com/paketo-buildpacks/spring-boot
[INFO]     [creator]       Build Configuration:
[INFO]     [creator]         $BP_SPRING_CLOUD_BINDINGS_DISABLED   false  whether to contribute Spring Boot cloud bindings support
[INFO]     [creator]         $BP_SPRING_CLOUD_BINDINGS_VERSION    1      default version of Spring Cloud Bindings library to contribute
[INFO]     [creator]       Launch Configuration:
[INFO]     [creator]         $BPL_SPRING_CLOUD_BINDINGS_DISABLED  false  whether to auto-configure Spring Boot environment properties from bindings
[INFO]     [creator]         $BPL_SPRING_CLOUD_BINDINGS_ENABLED   true   Deprecated - whether to auto-configure Spring Boot environment properties from bindings
[INFO]     [creator]       Creating slices from layers index
[INFO]     [creator]         dependencies (22.5 MB)
[INFO]     [creator]         spring-boot-loader (446.0 KB)
[INFO]     [creator]         snapshot-dependencies (0.0 B)
[INFO]     [creator]         application (117.4 KB)
[INFO]     [creator]       Launch Helper: Reusing cached layer
[INFO]     [creator]       Spring Cloud Bindings 2.0.2: Contributing to layer
[INFO]     [creator]         Downloading from https://repo1.maven.org/maven2/org/springframework/cloud/spring-cloud-bindings/2.0.2/spring-cloud-bindings-2.0.2.jar
[INFO]     [creator]         Verifying checksum
[INFO]     [creator]         Copying to /layers/paketo-buildpacks_spring-boot/spring-cloud-bindings
[INFO]     [creator]       Web Application Type: Contributing to layer
[INFO]     [creator]         Servlet web application detected
[INFO]     [creator]         Writing env.launch/BPL_JVM_THREAD_COUNT.default
[INFO]     [creator]       4 application slices
[INFO]     [creator]       Image labels:
[INFO]     [creator]         org.opencontainers.image.title
[INFO]     [creator]         org.opencontainers.image.version
[INFO]     [creator]         org.springframework.boot.version
[INFO]     [creator]     ===> EXPORTING
[INFO]     [creator]     Reusing layer 'paketo-buildpacks/ca-certificates:helper'
[INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:helper'
[INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'
[INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:jre'
[INFO]     [creator]     Reusing layer 'paketo-buildpacks/executable-jar:classpath'
[INFO]     [creator]     Reusing layer 'paketo-buildpacks/spring-boot:helper'
[INFO]     [creator]     Reusing layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'
[INFO]     [creator]     Reusing layer 'paketo-buildpacks/spring-boot:web-application-type'
[INFO]     [creator]     Adding layer 'buildpacksio/lifecycle:launch.sbom'
[INFO]     [creator]     Reusing 3/5 app layer(s)
[INFO]     [creator]     Adding 2/5 app layer(s)
[INFO]     [creator]     Reusing layer 'buildpacksio/lifecycle:launcher'
[INFO]     [creator]     Reusing layer 'buildpacksio/lifecycle:config'
[INFO]     [creator]     Reusing layer 'buildpacksio/lifecycle:process-types'
[INFO]     [creator]     Adding label 'io.buildpacks.lifecycle.metadata'
[INFO]     [creator]     Adding label 'io.buildpacks.build.metadata'
[INFO]     [creator]     Adding label 'io.buildpacks.project.metadata'
[INFO]     [creator]     Adding label 'org.opencontainers.image.title'
[INFO]     [creator]     Adding label 'org.opencontainers.image.version'
[INFO]     [creator]     Adding label 'org.springframework.boot.version'
[INFO]     [creator]     Setting default process type 'web'
[INFO]     [creator]     Saving docker.io/library/bff:1.0-SNAPSHOT...
[INFO]     [creator]     *** Images (506f57c215a7):
[INFO]     [creator]           docker.io/library/bff:1.0-SNAPSHOT
[INFO]     [creator]     Reusing cache layer 'paketo-buildpacks/syft:syft'
[INFO]     [creator]     Reusing cache layer 'buildpacksio/lifecycle:cache.sbom'
[INFO] 
[INFO] Successfully built image 'docker.io/library/bff:1.0-SNAPSHOT'
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11.917 s
[INFO] Finished at: 2024-03-01T13:32:15-05:00
[INFO] ------------------------------------------------------------------------

Приложение Spring Boot, созданное с помощью сборочных пакетов Paketo, по умолчанию будет прослушивать порт 8080, поскольку это порт, который Spring Boot будет прослушивать по умолчанию. Вам больше ничего не нужно делать. Тот факт, что docker требует docker run -p для открытия порта, является лишь фактором того, как работает Docker. Он ничего не раскрывает, если вы об этом не скажете. Я не знаю, как работает Google Cloud Run, если вам нужно настроить какую-либо конфигурацию. Я могу сказать, что ваше приложение, если оно запускается правильно, определенно прослушивает порт 8080, если вы не изменили порт, который оно будет прослушивать, в конфигурации вашего приложения Spring.

Daniel Mikusa 04.03.2024 14:48

У вас есть журналы приложений? Вы должны увидеть, как запускается ваш контейнер и приложение Spring Boot. Он также покажет вам порт, который он прослушивает.

Daniel Mikusa 04.03.2024 14:49

Ну, Google Cloud Run не позволяет указывать параметры докера. Я могу создать образ, который будет работать с GCR, поместив EXPOSE 8080 в файл docker. Я могу запустить образ, созданный Paketo, вручную, указав docker run -p, как вы упомянули, но если образ не построен и что-то в метаданных не говорит, что порт 8080 открыт, тогда он не работает для GCR. Журналов приложения нет, поскольку приложение не запускается.

K.Nicholas 04.03.2024 16:15

Какой инструмент вы используете для запуска сборки? Инструменты сборки Spring Boot?

Daniel Mikusa 04.03.2024 21:24

Да, я использую spring-boot-maven-plugin с целью build-image и без дополнительных настроек.

K.Nicholas 04.03.2024 21:33

Хорошо, я только что перепроверил, и выяснилось, что в сборочных пакетах нет возможности предоставить порт, такой как EXPOSE, в Dockerfile. Тем не менее, я знаю, что Google Cloud Run работает со сборочными пакетами, потому что у них есть собственный набор сборочных пакетов. Возможно, они делают что-то уникальное в своих сборочных пакетах или, возможно, имеют разные инструменты для сборки сборочных пакетов для настройки метаданных и раскрытия этого порта. Я предполагаю, потому что я не знаком с Google Cloud Run. Вы можете попробовать их сборочный пакет/инструментарий и посмотреть, работает ли это.

Daniel Mikusa 04.03.2024 22:00

Насколько я вижу, лучший способ заставить это работать — использовать pack cli и установить аргумент порта во время сборки. См. Установка переменных среды для настройки сборок.

K.Nicholas 05.03.2024 16:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы на правильном пути! Использование CLI пакета и установка аргумента порта во время сборки — хороший подход, позволяющий гарантировать, что ваш веб-образ Spring Boot прослушивает правильный порт для Google Cloud Run.

Шаги:

  1. Сборка с помощью pack CLI:
pack build my-spring-boot-app:latest --env PORT=8080

  • Замените my-spring-boot-app:latest названием и тегом вашего приложения.

  • Это задает для переменной среды PORT значение 8080 в образе контейнера.

  1. Нажмите и разверните:
  • Отправьте построенный образ в реестр контейнеров.

  • Разверните образ в Cloud Run, используя gcloud run deploy:

gcloud run deploy SERVICE_NAME --image REGISTRY_URL/my-spring-boot-app:latest

  • Замените заполнители фактическими значениями.

Такой подход гарантирует, что ваше приложение прослушивает ожидаемый порт (8080) для Cloud Run.

Ссылка на документацию:

Хорошо, мне удалось сделать это с помощью пакетов сборки Google, и все работало нормально. Пакеты сборки Google добавляют EXPOSE 8080 в слой. Вышеупомянутая команда работала нормально, и я также смог выполнить Удаленную сборку, за исключением Windows, мне пришлось ввести команду из WSL, чтобы gradlew был отмечен как исполняемый в Linux. Вы думаете это ошибка?

K.Nicholas 06.03.2024 00:11

В качестве продолжения: если я удалю gradlew или mvnw из проекта, то google-cloud-build будет использовать встроенный mvn или gradle, на который не распространяются проблемы с разрешениями Unix.

K.Nicholas 06.03.2024 14:20

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

Как динамически выбирать, какие ограничения следует применять к задаче оптимизации на основе входных данных внешнего интерфейса в Timefold Spring Boot?
Реактивная Springboot с сервером Netty и Swagger-UI
Службе требовался bean-компонент типа «Репозиторий», который не удалось найти в проекте Springboot
Должен ли я проверить значение null для объекта ResponseEntity<> в Spring Boot?
Использование IP-адреса в качестве идентификатора проверяющей стороны в ключе доступа
Допустимо ли выполнение операции обновления в методе @GetMapping в Spring MVC?
Я пытаюсь настроить заказ службы (микросервис). но я постоянно получаю сообщение об ошибке типа bean-компонента
Ошибка jdbc Spring 6. Невозможно определить правильную сигнатуру вызова. Имя для аргумента типа [java.lang.String] не указано
Запустите маршрут Apache Camel из другого приложения весенней загрузки
Redoc не удалось создать html-шаблон (что-то пошло не так... Не удалось загрузить)