【问题标题】:Docker - copying JAR file: no such file or directory?Docker - 复制 JAR 文件:没有这样的文件或目录?
【发布时间】:2020-04-08 08:34:12
【问题描述】:

我有以下Dockerfile 用于一个非常简单的spring boot REST 应用程序:

# Prepare runtime.
FROM openjdk:8-jre-alpine AS runtime
WORKDIR /app
EXPOSE 80

# Prepare build workspace.
FROM gradle:5.3.0-jdk-alpine AS sdk
WORKDIR /build-workspace

# Setup build workspace.
USER root
RUN chown -R gradle .
USER gradle

# Copy.
COPY build.gradle .
COPY gradle.properties .
COPY src ./src

# Build, Test and publish.
RUN gradle clean bootJar

# App image.
FROM runtime
COPY --from=sdk /build-workspace/build/libs/myApplication-0.0.1-SNAPSHOT.jar ./app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

我的 docker 文件在我项目的根目录下,在 build.gradle 等旁边。

当我跑步时:

docker build -t myApplication .

我得到错误:

步骤 14/15:复制 --from=sdk /build-workspace/build/libs/myApplication-0.0.1-SNAPSHOT.jar ./app.jar 复制失败:stat /var/lib/docker/overlay2/e9441fe0b968bd5776ee860bbca780d6c2037fcf90cb67d01c3b1fd349d3996f/merged/build-workspace/build/libs/myApplication-0.0.1-SNAPSHOT.jar: 没有这样的文件或目录

我在 docker 文件中做错了什么?

【问题讨论】:

  • 能否请您尝试在本地构建 jar 并使用 docker 文件复制它?只是为了确保 gradle clean bootJar 没有失败?一切看起来都很好,唯一的原因似乎是没有 jar,这可能是由于 jar 构建步骤不起作用。
  • 这一步的输出是什么 RUN gradle clean bootJar
  • docker build 序列也会打印出一系列十六进制数字;这些是有效的图像 ID,您可以 docker run 任何一个来查看正在构建的图像内部的内容。
  • @GAK gradle clean bootJar 工作正常,只是在 COPY 时失败
  • 我了解 bootJar 命令运行良好。但是它在哪里创建文件。 COPY 命令无法到达该位置。这就是为什么我想要 build jar 命令的输出。

标签: rest spring-boot docker gradle jar


【解决方案1】:

您可以在RUN gradle clean bootJar 之后添加RUN ls -l /build-workspace/build/libs/ 以查看该目录中的内容。

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 2021-02-24
    • 1970-01-01
    • 2020-04-27
    • 2022-01-15
    • 2019-01-22
    • 2018-12-30
    • 2017-07-02
    • 2022-06-13
    相关资源
    最近更新 更多