我是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文件中进行哪些更改?
最佳答案
从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中dockerfile位置,然后构建它。