Google Cloud Platform Pipeline/Container Builder使用复制或为Spring



使用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 Cloud Platform(GCP),创建了Kubernetes群集,创建的管道(使用容器构建器)通过配置GitHub URL位于Helloworld Microservice代码所在的位置。有两个选项可以运行构建(使用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

我试图用复制命令替换它,但问题仍然相同。

注意:我尝试使用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应用程序具有在Google Cloud Platform中构建的Dockerfile的某些特定配置?


更新-1

根据在本地计算机上使用以下步骤尝试的评论:

  1. ran命令 mvn clean。清理 target 文件夹

  2. 更新了Dockerfile

来自Maven:3.5-JDK-8作为构建
复制src。
复制pom.xml。
运行MVN -F pom.xml清洁包

来自OpenJDK:8
音量/TMP
复制-from = build target/helloworld.jar helloworld.jar
公开8081
entrypoint [" java"," - jar"," helloworld.jar"]

  1. ran 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)

看起来是文件路径的问题。

尝试以下更新的Dockerfile,该Dockerfile明确设置了工作目录。在图像之间复制JAR时,它还使用明确的文件路径。

FROM maven:3.5-jdk-8-slim AS build
WORKDIR /home/app
COPY src     /home/app/src
COPY pom.xml /home/app
RUN mvn clean package
FROM openjdk:8-jre-slim
COPY --from=build /home/app/target/helloworld-0.0.1-SNAPSHOT.jar /usr/local/lib/helloworld.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","/usr/local/lib/helloworld.jar"]

其他注释:

  • 请参阅相关的答案,以构建Spring Boot应用程序的完整示例
  • 我已经将第二阶段基于JRE图像。减小输出图像的大小。

相关内容

  • 没有找到相关文章

最新更新