【问题标题】:I can't find my jar file when trying to copy it in a multi stage docker build尝试在多阶段 docker 构建中复制它时找不到我的 jar 文件
【发布时间】:2020-02-05 03:27:53
【问题描述】:

所以我对 docker 很陌生,我一直在尝试 dockerise 我的 spring-boot 应用程序。我设法让它与给定的 JAR 文件一起工作,但现在我想进行多阶段构建以使用 gradle 构建 JAR 文件,这样我就不必在运行 docker build {app-name}

之前手动生成 JAR

这是我目前的设置。它找不到 jar 文件,我不知道如何导航文件系统来找到它(除了在 dockerfile 中运行 shell 命令以打印出文件和文件夹)

DOCKERFILE

FROM gradle:jdk8 as build

COPY --chown:gradle:gradle . /home/gradle/src

WROKDIR /home/gradle/src 

RUN gradle clean build --parallel

FROM  openjdk:8-alpine

WORKDIR /usr/app

COPY --from=build /home/gradle/src/app-name.jar /usr/app/

RUN sh -c 'touch app-name.jar'

ENTRYPOINT ["java", "-jar", "app-name.jar"]

Console Output

Step 7/9. : COPY —from=build /home/gradle/src/app-name.jar /usr/app/
COPY failed: stat /var/lib/ldocker/overlay2/22e326d9f26f581a629417c35e226428f3cc63fd496799c55dde4be413ca26690/merged/home/gradle/src/app-name.jar: no such file or directory

【问题讨论】:

  • 为什么你不能按照你的建议运行,例如find在Dockerfile中确定gradle构建的JAR文件的名称和路径?
  • 欢迎来到 StackOverflow。尽可能避免使用图像,将您的设置添加为文本并尝试创建一个最小的示例。更多详情请查看writing the perfect question
  • @hmm 我其实没想过使用 find 命令。令人尴尬的是,我只是运行cd lib | ls 之类的命令。感谢您的建议。
  • @JeroenHeier 感谢您的链接,我以前从未在这里发过帖子。会读一读!

标签: java spring-boot docker gradle dockerfile


【解决方案1】:

COPY 指令需要从 gradle 的 build/libs/ 目录复制,该目录是构建工件的默认位置 - 因为它正在寻找项目根目录中的 JAR。这应该有效:

COPY —from=build /home/gradle/src/build/libs/app-name.jar /usr/app

这假设 Dockerfile 位于项目的根目录中。如果不是,那么您需要相应地调整 dockerfile 中使用的复制路径。

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2021-05-20
    • 2019-03-25
    • 2020-04-26
    • 2020-04-07
    • 2019-04-16
    相关资源
    最近更新 更多