如何访问 Dockerfile 中的 Docker 构建上下文路径

问题描述 投票:0回答:1

我在目录中定义了 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-service
 运行 
C:

这会导致错误提示

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 镜像中。

docker dockerfile
1个回答
9
投票

您不需要在您的

dockerfile
中知道 docker 构建上下文位置。

您需要了解的是:

  • 您构建上下文的位置。 (比如
    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 构建命令将是

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\Dockerfile
C:\work\Personal\mycontext
指定 docker 构建上下文的位置。

无论 docker build 命令运行的位置如何,只要您提供

dockerfile
和 docker build
context
的确切位置,它就可以工作。

更多信息这里

© www.soinside.com 2019 - 2024. All rights reserved.