2

スプリング ブートを 2.4 にアップグレードした後、次のスクリプトで作成した最終的な Docker イメージを実行できません。

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

これはSpring Boot 2.3では問題なく機能していましたが、Spring Boot 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'

編集2:

bootBuildImagespring-boot 2.3 と 2.4 で作成されたイメージの違いをさらに調べたところ、デフォルトENTRYPOINTはもはや/cnb/lifecycle/launcherbutではないというヒントが見つかりました/cnb/process/web

Dockerfile の最後の行を更新して、このエントリポイントを選択します。

ENTRYPOINT /cnb/process/web

イメージを開始できます。わーい!:)

ただし、ライフサイクルランチャーでデフォルトのプロセスが使用されなくなったのはなぜだろうか?

4

0 に答える 0