Docker - 未在本地构建应用程序时复制失败?

Docker - COPY fails when app has not been built locally?

我有以下 dockerfile :

# 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

# Accept build args.
ARG ORG_GRADLE_PROJECT_mavenUser
ARG ORG_GRADLE_PROJECT_mavenPassword

# 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 build bootJar

# App image.
FROM runtime
COPY /build/libs/myApp-0.0.1-SNAPSHOT.jar ./app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

该应用程序是一个 spring boot MVC 网络应用程序,dockerfile 位于 build.gradle

旁边的根目录中

当我运行:

docker build -t myApp .

我得到:

Step 16/17 : COPY /build/libs/myApp-0.0.1-SNAPSHOT.jar ./app.jar
COPY failed: stat /var/lib/docker/tmp/docker-builder441781405/build/libs/myApp-0.0.1-SNAPSHOT.jar: no such file or directory

当我首先使用 gradle 在本地构建应用程序时,dockerfile 工作 - 大概是因为它可以看到构建文件夹。

如何更改我的 dockerfile 以便不需要本地构建?

使用COPY --from=sdk /build-workspace/libs/myApp-0.0.1-SNAPSHOT.jar ./app.jar

with --from=sdk 你告诉 Docker 从 gradle 构建阶段复制文件,没有它 docker 将从你的本地文件系统复制它。

了解更多信息see