首页 > 解决方案 > 如何访问 Dockerfile 中的 Docker 构建上下文路径

问题描述

我在目录中定义了 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

我试图docker build C:\work\Personal\API\api-serviceC:

这导致错误说

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

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

有没有办法访问传递给docker build命令的构建上下文文件夹Dockerfile

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

标签: dockerdockerfile

解决方案


您不需要在dockerfile.

你需要知道的是:

  • 您构建上下文的位置。(说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 build 上下文的位置。

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

更多信息在这里

希望这可以帮助。


推荐阅读