Spring boot Dockerfile创建spring boot的映像

Spring boot Dockerfile创建spring boot的映像,spring-boot,docker,gradle,microservices,Spring Boot,Docker,Gradle,Microservices,我想为spring boot应用程序创建Docker映像。它使用gardle作为构建工具 在bitbucket存储库中,我可以看到下面的文件 --> src --> build.gradle --> Dockerfile --> gradlew --> gradlew.bat 现在Dockerfile有以下内容 FROM openjdk:8-jdk-alpine VOLUME /tmp ARG DEPENDENC

我想为spring boot应用程序创建Docker映像。它使用gardle作为构建工具

在bitbucket存储库中,我可以看到下面的文件

    --> src
    --> build.gradle
    --> Dockerfile
    --> gradlew
    --> gradlew.bat
现在Dockerfile有以下内容

  FROM openjdk:8-jdk-alpine
  VOLUME /tmp
  ARG DEPENDENCY=target/dependency
  COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
  COPY ${DEPENDENCY}/META-INF /app/META-INF
  COPY ${DEPENDENCY}/BOOT-INF/classes /app
  EXPOSE 8080
  ENTRYPOINT ["java","-cp","app:app/lib/*","eds.billnq"]
当我尝试使用Dockerfile创建图像时,我得到一个错误

    target/dependency/BOOT-INF library not found 
    target/dependency/META-INF library not found
我的问题是为什么docker文件中没有gradle构建步骤? 目标/依赖项/将在何处创建

为什么docker文件中没有gradle构建步骤

看起来,
Dockerfile
希望在构建Docker映像之前(由Gradle)已经构建了应用程序,并且生成的类文件和jar可以在
target/dependency
下的各个目录中使用

评论中提到的@WonChul Heo涉及如何使用Gradle构建Docker映像,特别是使用插件
Gradle.plugin.com.palantir.Gradle.Docker:Gradle Docker

目标/依赖项/将在何处创建

我猜它们应该在运行Gradle构建时创建,但是如果不知道构建是如何配置的,很难说清楚

我建议您再次阅读该指南,并将其推荐内容与代码库中的内容进行比较,尤其是Gradle构建定义


在一天结束时,如果您从一个私有代码回购中提取了代码,并且不知道如何构建它,那么最好向那些致力于代码库的人寻求建议,而不是向他们寻求建议。

在处理Gradle时,您的jar文件将在
build/libs/{Your jar}
中生成


请将
ARG DEPENDENCY=target/DEPENDENCY
更改为
ARG DEPENDENCY=build/libs
,然后再试一次好吗?它会起作用。

参考@WonChul Heo我参考了它,但我仍然不明白为什么Dockerfile中没有gradle构建步骤你参考了设置吗?@WonChul Heo是的,我也修改了它,因为有一些错误。除了错误,我这里的主要问题是为什么我们不在Dockerfile中使用构建步骤?嗯,我对spring不太熟悉,但是您得到的错误是,目标/依赖项实际上应该是您机器中的一个目录。因此,第4行和第5行基本上是尝试将机器中的target/dependency目录中的BOOT-INF和META-INF复制到docker容器中。Docker文件中没有实际创建目录的内容,它只是使用它?1. $gradle build 2.$gradle run$docker build-t my image.这篇文章提供了几种工作方式的选项,但其中一个主要内容是在gradle中使用docker插件。如果这样做,您将不会直接运行docker build,但Gradle将为您执行此操作。页面上说:“您可以构建一个标记的docker映像,然后使用Gradle在一个命令中将其推送到远程存储库:./gradlew build docker”。我看不到您的整个存储库,所以我不能确切地说什么命令可以工作,但是如果我们认为repo的创建者遵循了该指南,那么您应该运行
/gradlew build docker