【问题标题】:How to access Docker build context path inside Dockerfile如何访问 Dockerfile 中的 Docker 构建上下文路径
【发布时间】:2019-07-31 12:51:32
【问题描述】:

我在目录中定义了 Dockerfile

C:\work\Personal\API\api-service

Dockerfile

FROM maven:3.6.1-jdk-8 AS BUILD_IMAGE 
COPY api-service /usr/src/app/api-service
COPY pom.xml /usr/src/app  
RUN mvn -f /usr/src/app/pom.xml clean install

我正在尝试从C: 运行docker build C:\work\Personal\API\api-service

这会导致错误提示

COPY failed: stat /var/lib/docker/tmp/docker-builder483308674/api-init-service: no such file or directory

为了让我将源代码从本地机器复制到 docker,我需要知道我的Dockerfile 中构建上下文文件夹的位置。

有什么方法可以访问在Dockerfile 中传递给docker build 命令的构建上下文文件夹?

在我的本地机器上,我可以从与Dockerfile 所在的同一目录运行docker build 命令。但是从 CI 工具我不知道docker buildcommand 将在哪里执行。因此,如果我知道作为参数传递的 docker build 上下文路径,我可以根据上下文路径将源代码复制到 docker 映像中。

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    您不需要在您的dockerfile 中知道 docker build 上下文位置。

    你需要知道的是:

    • 构建上下文的位置。 (比如C:\work\Personal\mycontext,其中包含您需要在 docker 容器中复制的文件和文件夹)
    • dockerfile 的位置(比如C:\work\Personal\API\api-service\Dockerfile
    • 您还需要了解上下文的相对文件路径结构。喜欢
    - C:\work\Personal\mycontext
      |
       - scripts
         |
         - start.sh
      |
      - create.py
      |
      - target
        |
        - maven
          |
          - abc.jar
    

    在这种情况下,您的 dockerfile 将包含适当的命令,例如 COPY scripts /scripts,假设这些文件从上下文文件夹 C:\work\Personal\mycontext 运行,则复制这些文件

    您的 docker build 命令将是

    docker build -f C:\work\Personal\API\api-service\Dockerfile -t image:version1 C:\work\Personal\mycontext
    

    注意:这里-f选项指定dockerfile的位置,在这种情况下它的C:\work\Personal\API\api-service\DockerfileC:\work\Personal\mycontext指定docker构建上下文的位置。

    无论 docker build 命令运行的位置如何,只要您提供 dockerfile 和 docker build context 的确切位置,它就会起作用。

    更多信息here

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-08-16
      • 2019-04-22
      • 2021-09-15
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多