【问题标题】:How to copy a jar-file from one docker stage to another with docker onbuild copy?如何使用 docker onbuild copy 将 jar 文件从一个 docker 阶段复制到另一个?
【发布时间】:2020-07-26 22:19:59
【问题描述】:

我是 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 文件的代码。你有什么想法,我怎样才能让它工作,我应该在第二个 docker 文件中改变什么?

【问题讨论】:

  • 您所描述的无法按原样工作。问:您能否更新您的帖子以解释为什么您需要分阶段构建?构建链背后的“要求”?

标签: java docker gradle dockerfile


【解决方案1】:

ONBUILD reference 我了解到ONBUILD 命令在继承FROM 命令时直接插入到它之后。

据我了解,这意味着在发出 FROM 命令时您的 app.jar 需要存在,即您的有效 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 位置,然后构建它。

【讨论】:

    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2011-04-19
    相关资源
    最近更新 更多