【发布时间】:2021-11-05 05:23:30
【问题描述】:
在尝试创建 docker build 时,出现如下错误:
Status: Downloaded newer image for adoptopenjdk/openjdk11:alpine-jre
---> fcb7960593e0
Step 13/18 : ENV ARTIFACT_NAME=userservice.jar
---> Running in f9cb2c5751ce
Removing intermediate container f9cb2c5751ce
---> a8d457c0023a
Step 14/18 : ENV APP_HOME=/usr/app/
---> Running in 4376cb0c3120
Removing intermediate container 4376cb0c3120
---> 6df0ab62c566
Step 15/18 : WORKDIR $APP_HOME
---> Running in e44347ce7a6b
Removing intermediate container e44347ce7a6b
---> ac63acfe40e6
Step 16/18 : COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/*.jar ${ARTIFACT_NAME}
COPY failed: no source files were specified
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: step exited with non-zero status: 1
这是 docker 文件:
# using multistage docker build
# ref: https://docs.docker.com/develop/develop-images/multistage-build/
# temp container to build using gradle
FROM gradle:6.9.1-jdk11 AS TEMP_BUILD_IMAGE
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY build.gradle settings.gradle $APP_HOME
COPY gradle $APP_HOME/gradle
COPY --chown=gradle:gradle . /home/gradle/src
USER root
RUN chown -R gradle /home/gradle/src
RUN gradle build || return 0
COPY . .
RUN gradle clean build
# actual container
FROM adoptopenjdk/openjdk11:alpine-jre
ENV ARTIFACT_NAME=userservice.jar <--- Here (fails)
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/*.jar ${ARTIFACT_NAME} <--- Here (fails)
EXPOSE 8080
ENTRYPOINT ["java", "-Dspring.profiles.active=h2_db", "-jar", "${ARTIFACT_NAME}"]
如果我们将构建文件名硬编码如下,那么一切正常:
# actual container
FROM adoptopenjdk/openjdk11:alpine-jre
ENV ARTIFACT_NAME=userservice-0.0.2-SNAPSHOT.jar <--- Here (works)
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/$ARTIFACT_NAME . <--- Here (works)
如何将最新的构建工件复制为特定名称?在上述情况下,应选择 userservice-0.0.2-SNAPSHOT.jar 作为 userservice.jar。
【问题讨论】:
标签: spring-boot docker dockerfile