首页 > 解决方案 > 在多阶段 docker build 中出现错误“复制失败:stat /home/app/target/Service.jar:文件不存在”

问题描述

我的 Docker 文件是,

FROM maven:3.6.0-jdk-11-slim AS build

COPY src /home/app/src

COPY pom.xml /home/app

RUN mvn -f /home/app/pom.xml clean package


FROM openjdk:11-jre-slim

COPY --from=build /home/app/target/Service.jar /usr/local/lib/Service.jar

EXPOSE 8081

ENTRYPOINT ["java","-jar","/usr/local/lib/service.jar"]

执行 COPY --from 行时,出现错误“COPY failed: stat /home/app/target/Service.jar : file does not exist”。

注意:当我们执行“RUN ls /home/app”命令时,它会列出文件和目标目录。

有人可以帮忙吗。

标签: dockergitlabdockerfilegitlab-cidocker-registry

解决方案


finalName你的pom中有定义吗?

<build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
...

如果不是,则生成的工件将在名称中具有版本控制,并且不会被调用Service.jar,但类似于Service-1.0-SNAPSHOT.jar

FROM maven:3.6.0-jdk-11-slim AS build
COPY src /home/app/src
COPY pom.xml /home/app/pom.xml
WORKDIR /home/app
RUN mvn clean package


FROM openjdk:11-jre-slim
COPY --from=build /home/app/target/Service_AND_VERSION_STUFF.jar /usr/local/lib/Service.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","/usr/local/lib/Service.jar"]

不要忘记始终使用相同的外壳(服务!=服务)


推荐阅读