如何使用docker onbuild copy将jar文件从一个Docker阶段复制到另一个Docker阶段?

时间:2020-07-26 22:19:59

标签: java docker gradle dockerfile

我是Docker的初学者,我试图分两个阶段构建映像。 第一个docker-file被上传到docker-hub并具有以下结构:

FROM openjdk:8-jdk-alpine 
ONBUILD COPY app.jar /app.jar
CMD ["java", "-jar", "/app.jar"]

第二个dockerfile:

FROM gradle:4.7.0-jdk8-alpine AS build
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN ./gradlew build

FROM <repo>/<first_docker_file>:1.0
COPY --from=build /home/gradle/src/build/libs/*.jar /app.jar

所以我需要构建我的项目->生成jar文件->将其复制到第二个docker文件的第二个docker阶段的根目录。 我需要将生成的jar文件从第一阶段复制到第二阶段的根目录,因为触发了“ ONBUILD COPY app.jar /app.jar”,并且正在等待根目录中的app.jar文件。我在第二个文件中提供的代码不起作用。我也无法更改第一个docker-file的代码。您有任何想法吗,我该如何运作?在第二个docker文件中应该更改什么?

1 个答案:

答案 0 :(得分:0)

ONBUILD reference那里我了解到,ONBUILD命令是在从FROM命令继承后直接插入的。

据我了解,这意味着在发出app.jar命令时您的FROM必须存在,即您的有效Dockerfile看起来像

FROM <repo>/<first_docker_file>:1.0
COPY app.jar /app.jar
COPY --from=build /home/gradle/src/build/libs/*.jar /app.jar
[...]

这显然行不通。

您的第一个dockerfile似乎不打算在分阶段构建中使用,发布第一个dockerfile上的构建时,您需要在工作目录中获得app.jar,例如,通过在容器内进行编译并将您的app.jar复制到您的第一个dockerfile位置,然后进行构建。