我在目录中定义了 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 镜像中。
您不需要在您的
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
的确切位置,它就可以工作。
更多信息这里。