java - 当尝试在多阶段 docker 构建中复制它时,我找不到我的 jar 文件

标签 java spring-boot docker gradle dockerfile

所以我对 docker 非常陌生,我一直在尝试将我的 spring-boot 应用程序进行 dockerise。我设法让它使用给定的 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

最佳答案

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

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

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

关于java - 当尝试在多阶段 docker 构建中复制它时,我找不到我的 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58276248/

相关文章:

spring-boot - Docker的环境变量未传递给Spring

shell - 场所: `fly hijack`返回 “error: open/dev/stdin: permission denied”

java - 找出我的线程落在 ReentrantLock 中的什么位置

java - 适合保存毫秒数据的容器或数据结构

java - android studio 执行失败,因为 idk-1.8 的任务进程异常

java - Spring 启动: Read Datasource properties from another property file

java - Junit 测试中的 RestTemplate 模拟,mockRestTemplate.postForObject() 返回 null

macos - docker 在 mac 上运行 ubuntu 没有任何反应

azure - azure 存储上的 docker-compose 卷 : how to bind to a file

java - Eclipse 中用于绘制 jBPM 的向导