【问题标题】:Dockerfile Add command failing to locate target folderDockerfile 添加命令未能找到目标文件夹
【发布时间】:2021-06-14 23:58:49
【问题描述】:

我在 Spring Boot 应用程序的根目录中有一个 Dockerfile,并且我在相同路径中有一个目标文件夹,如下结构所示:

|--src
  |--main
     |--com.abc.myApp
|--target/xyz.jar
|--Dockerfile
|--pom.xml

我的 Dockerfile 如下所示:

From openjdk:8-jdk-alpine
WORKDIR /opt
ADD /target/xyz.jar .

当我尝试使用以下命令执行时:

docker build . -t xyz

我收到如下错误:

Step 3/3 : ADD /target/xyz.jar .
ADD failed: stat /var/lib/docker/tmp/docker-builder225663872/target/xyz.jar: no such file or directory

Dockerfile 位于 /opt/MyApp/Dockerfile,目标文件夹位于 /opt/MyApp/target/xyz.jar

我哪里错了?我也没有任何.dockerignore 文件。

【问题讨论】:

  • 尝试删除目录的初始斜线。添加目标/xyz.jar .
  • 已经尝试过了,但仍然面临同样的问题..我仍然想知道为什么 Dockerfile 引用 /var/lib 路径而不是 /opt 或 Dockerfile 位置
  • 尝试运行./mvnw clean package首先构建项目
  • 由于有斜线,路径将来自根。此外,您提供的 WORKDIR 是容器上的目录,而不是本地系统上的目录。

标签: java spring-boot docker dockerfile devops


【解决方案1】:

由于 jar 文件还将包含版本号,因此您最好使用此解决方案

FROM openjdk:8-jdk-alpine

ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

存在 ARG 是因为 COPY 不适用于通配符。

正如已经评论过的,你必须先打电话:

mvn package

请阅读有关 Spring Boot 和 Docker 的更多信息:https://spring.io/guides/gs/spring-boot-docker/

从 Spring 2.3 开始,您甚至不需要 Dockerfile。你可以运行

mvn spring-boot:build-image

另请阅读:https://www.baeldung.com/dockerizing-spring-boot-application

【讨论】:

    【解决方案2】:

    注意构建图像的位置。例如,如果您在主目录中:-

    /home/用户/

    并且您将 Dockerfile 和 jar 放在同一目录中。您的 Docker 文件应包含以下条目:-

    FROM adoptopenjdk/openjdk11:alpine-jre
    ADD item-0.0.1-SNAPSHOT.jar itemapp.jar
    ENTRYPOINT ["java","-jar","itemapp.jar"]
    

    Add 不应该有 /target 路径。

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 2019-07-23
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      相关资源
      最近更新 更多