【发布时间】: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