ОШИБКА: не удалось запустить: определить команду запуска: при отсутствии процесса по умолчанию требуется команда
После обновления spring boot до 2.4 мы не можем запустить последний образ докера, который мы создали с помощью этого скрипта:
script:
- echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY
- apk add openjdk11
- ./gradlew bootBuildImage --imageName=$DOCKER_IMAGE_INTERMEDIATE
- docker build -f ./docker/Dockerfile --build-arg base_image=$DOCKER_IMAGE_INTERMEDIATE -t $DOCKER_IMAGE_TAGGED .
- docker push $DOCKER_IMAGE_TAGGED
- docker tag $DOCKER_IMAGE_TAGGED $DOCKER_IMAGE_LATEST
- docker push $DOCKER_IMAGE_LATEST
наш
Dockerfile
просто создает папку и
chown
это к
CNB
пользователь:
# The base_image holds a reference to the image created by ./gradlew bootBuildImage
ARG base_image
FROM ${base_image}
ENV SOME_PATH /var/lib/some/files
USER root
RUN mkdir -p ${SOME_PATH}
RUN chown ${CNB_USER_ID}:${CNB_GROUP_ID} ${SOME_PATH}
USER ${CNB_USER_ID}:${CNB_GROUP_ID}
ENTRYPOINT /cnb/lifecycle/launcher
Хотя это нормально работало в весенней загрузке 2.3, теперь мы получаем эту ошибку после обновления до весенней загрузки 2.4 при попытке запустить образ:
ERROR: failed to launch: determine start command: when there is no default process a command is required
Редактировать:
В выходных данных журнала CI эта строка отображается в конце
bootBuildImage
команда:
[creator] Setting default process type 'web'
Edit2:
Путем дальнейшего изучения различий изображений, созданных
bootBuildImage
с Spring-boot 2.3 и 2.4 я обнаружил подсказку, что по умолчанию
ENTRYPOINT
больше не
/cnb/lifecycle/launcher
но
/cnb/process/web
.
Обновляем последнюю строку нашего Dockerfile, чтобы выбрать эту точку входа:
ENTRYPOINT /cnb/process/web
позволяет нам запустить изображение! ура!:)
Однако я оставляю вопрос открытым, потому что мне все еще интересно, почему процесс по умолчанию больше не используется программой запуска жизненного цикла?!
2 ответа
Я обнаружил аналогичную проблему при определении функции Google Cloud.
Я чувствую, что вы забыли определитьentrypoint
для вашей функции.
Вероятно, это связано с тем, что спецификация и, следовательно, жизненный цикл изменились во время обновления приложения для использования Spring Boot 2.4.
Ссылаться:
Сравнение проводится с версией 0.3, поскольку это запасной вариант, когда переменная средыCNB_PLATFORM_API
не установлен.