我们如何使用驻留在“当前构建上下文路径”之外的不同目录中的共享Dockerfile?

时间:2017-02-05 02:30:07

标签: docker dockerfile

考虑到以下文件系统结构:

enter image description here

我想执行docker build并将“default.sh”文件复制到Docker容器。我想将DockerfileB用于目录a,b和c。并将相同的Dockerfile应用于所有这三个脚本。但是,Docker抛出一个错误,说Dockerfile必须在同一个构建上下文中。

所以我运行这个:

cd /home/oleg/WebstormProjects/oresoftware/sumanjs/suman/test/groups/c &&  docker build --file=/home/oleg/WebstormProjects/oresoftware/sumanjs/suman/test/groups/Dockerfile -t c . 

我收到此错误:

unable to prepare context: The Dockerfile (/home/oleg/WebstormProjects/oresoftware/sumanjs/suman/test/groups/DockerfileB) must be within the build context (.)

这有什么办法吗?也许符号链接?迫切需要解决这个问题,因为我想分享Dockerfiles,而不必将相同的文件复制到子文件夹等。

1 个答案:

答案 0 :(得分:1)

由于与Dockerfile相同的原因,符号链接在这种情况下不起作用,符号链接目标将在“构建上下文”之外,而Docker不允许这样做。

在每个abc目录中硬链接Dockerfile可以共享Docker的一个文件,但这对源代码控制不起作用,比如Git 。

build argument可能允许重用Dockerfile。使用docker build目录的groups上下文,无论何时需要引用Dockerfile中的某个目录,都要使用变量/参数。

FROM alpine
ARG DIR
COPY ${DIR}/default.sh /default.sh

然后用

运行
cd groups
docker run --build-arg DIR=c -f ./DockerfileB .