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
ローカル マシンの手順の下で試したコメントに基づいています。
コマンドを実行しました
mvn clean
。そのきれいなターゲットフォルダ更新された 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"]
コマンド
docker build . -t helloworld:v1
を実行すると、そのイメージが作成されました。次に、コマンドを実行してコンテナーを開始します。
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)