【问题标题】:Getting an error "COPY failed: stat /home/app/target/Service.jar : file does not exist" in multistage docker build在多阶段 docker build 中出现错误“COPY failed: stat /home/app/target/Service.jar : file does not exist”
【发布时间】:2021-05-23 11:37:10
【问题描述】:

我的 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”命令时,它会列出文件和目标目录。

有人可以帮忙吗?

【问题讨论】:

  • 文件不存在。您可以在RUN mvn -f ... 之后RUN ls -lisa /home/app/target 列出target 文件夹的内容。
  • 当我们执行“RUN ls /home/app”命令时,它会列出文件和目标目录。
  • 它是否在/home/app/target 中列出了Service.jar
  • 对,target 目录也有Service.jar 文件(我假设来自RUN ls /home/app/target)?

标签: docker gitlab dockerfile gitlab-ci docker-registry


【解决方案1】:

你的 pom 中是否定义了finalName

<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"]

不要忘记始终使用相同的大小写(服务!=服务)

【讨论】:

  • 我们不应该发布投机性的答案。我们宁愿在 cmets 中要求澄清。
  • @Turing85 我通常同意,但我确信答案正朝着这个方向发展......
  • 如果 OP 设置了最终名称然后发布答案,那么首先在 cmets 中仍然不会受到伤害。此外,我建议不要更改 finalName 而是修改 dockerfile
猜你喜欢
  • 2021-11-16
  • 2021-10-09
  • 2022-12-02
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 2020-03-14
  • 2020-01-05
相关资源
最近更新 更多