1

Spring Boot (2.1.3)、Java 8、Maven を使用して、基本的な HelloWorld マイクロサービスを作成しました。

pom.xml には、以下のような Maven プラグイン エントリがあります。

<plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                    <mainClass>com.example.HelloWorldApplication</mainClass>
            </configuration>
        </plugin>

Dockerfileは以下のようになります

FROM openjdk:8
VOLUME /tmp
ADD target/helloworld.jar helloworld.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","helloworld.jar"]

コマンドを使用してローカル マシンにイメージを作成しました

docker build . -t helloworld:v1

そこからコンテナを作成して検証。docker-hub アカウントと github アカウントにコードをチェックインしました。

Google クラウド プラットフォーム (GCP) にログインし、kubernetes クラスターを作成し、helloworld マイクロサービス コードが存在する github url を構成して (コンテナー ビルダーを使用して) パイプラインを作成しました。ビルドを実行するには 2 つのオプションがあります (Dockerfile または cloudbuild.yaml を使用)。Dockerfile を使用してビルドを実行しています。

ビルドが選択されて実行されると、Dockerfile のこの行で失敗します

ADD target/helloworld.jar helloworld.jar

GCP ログに表示されるエラー:

ADD failed: stat /var/lib/docker/tmp/docker-builderxxxxxx/target/helloworld.jar: no such file or directory

COPY コマンドで置き換えようとしましたが、問題は同じです。

注: 私は cloudbuild.yaml を使用しようとしましたが、これが私の cloudbuild.yaml の外観です。

  steps:
  # Build the helloworld container image.
  - name: 'gcr.io/cloud-builders/docker'
    args:
      - 'build'
      - '-t'
      - 'gcr.io/${PROJECT_ID}/helloworld:${TAG_NAME}'
      - '.'

これは何の違いもありませんでした。問題は同じままです。

Springboot Java アプリケーションに、Dockerfile が Google Cloud Platform で正常に構築されるための特定の構成があるかどうか、何か考えはありますか?


更新 - 1

ローカル マシンの手順の下で試したコメントに基づいています。

  1. コマンドを実行しましたmvn clean。そのきれいなターゲットフォルダ

  2. 更新された Dockerfile

FROM maven:3.5-jdk-8 AS build
COPY src .
pom.xml をコピーします。
RUN mvn -f pom.xml クリーン パッケージ

FROM openjdk:8
VOLUME /tmp
COPY --from=build target/helloworld.jar helloworld.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","helloworld.jar"]

  1. コマンドdocker build . -t helloworld:v1を実行すると、そのイメージが作成されました。

  2. 次に、コマンドを実行してコンテナーを開始します。 docker run -p 8081:8081 -n helloworld-app -d helloworld:v1

コンテナが起動して終了し、ログに次のエラーが表示されます:

Exception in thread "main" java.lang.ClassNotFoundException: com.example.HelloWorldApplication at java.net.URLClassLoader.findClass(URLClassLoader.java:382)

4

1 に答える 1