【问题标题】:Docker can't copy files from outsite of Dockerfile's folder [duplicate]Docker无法从Dockerfile文件夹的外部复制文件[重复]
【发布时间】:2022-02-25 00:52:00
【问题描述】:

我无法从 dockerfile 文件夹的外部复制文件。 我从 docker-compose build 收到错误:

failed to compute cache key: failed to walk /var/lib/docker/tmp/buildkit-mount196528245/target: lstat /var/lib/docker/tmp/buildkit-mount196528245/target: no such file or directory
ERROR: Service 'discovery' failed to build : Build failed

有文件夹结构

discovery
  -docker
     Dockerfile
  -target
     discovery.jar

这是 Dockerfile

FROM openjdk:11
ARG JAR_FILE=../target/discovery.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

这是我的 docker-compose 文件

services:
discovery:
    build: ./discovery/docker
    ports:
      - 8761:8761

非常感谢您的帮助。

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    这是设计使然。

    Docker 构建上下文(与 Dockerfile 中的指令一起发送到 Docker 守护程序的 tarball)是从您运行 docker build 的目录中计算出来的。

    你需要这样做

    $ docker build -f docker/Dockerfile
    

    discovery 内,与

    ARG JAR_FILE=./target/discovery.jar
    

    (不是..)(或者传递对应的--build-arg)。

    【讨论】:

    • @AKK 但我无法从 docker 文件夹中出来构建应用程序
    • 那么您将很难构建您的应用程序,因为这就是 Docker 的工作方式。
    【解决方案2】:

    正如 AKX 答案中已经指出的那样,您不能移出上下文(向上)。我只是想表明可以通过提供正确的参数来构建您的应用程序。既然你这么说,你就不能离开 docker 文件夹。

    discovery:
      build:
        context: discovery
        Dockerfile: docker/Dockerfile
        args:
          JAR_FILE: target/discovery.jar
    

    关键是使用父目录discovery作为上下文,但是使用子目录docker中的Dockerfile。请注意,这与使用 compose 时的构建上下文相关。

    【讨论】:

      猜你喜欢
      • 2021-05-24
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 2018-09-13
      • 2012-01-09
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多