Создан базовый микросервис HelloWorld с использованием Spring Boot (2.1.3), Java 8, Maven.
В 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, создали конвейер (с помощью компоновщика контейнеров), настроив URL-адрес github, в котором находится код микросервиса helloworld.Существует два варианта запуска сборки (используйте 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
.Это очистило target папку
обновленный Dockerfile
ОТ maven: 3.5-jdk-8 AS build
COPY src.
COPY pom.xml.
RUN mvn -f pom.xml очистить пакет
ОТ openjdk: 8
ОБЪЕМ / tmp
COPY --from = buildtarget / helloworld.jar helloworld.jar
ВОЗДЕЙСТВИЕ 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)