我们如何使用驻留在不同于“当前构build上下文path”的目录中的共享Dockerfile?

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


在这里输入图像说明

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

所以我运行这个:

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

我得到这个错误:

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

有没有办法解决? 也许符号链接? 绝望的解决这个,因为我想共享Docker文件,而不是必须复制相同的子文件夹,等等

在这种情况下,符号链接将无法工作,原因与Dockerfile相同,符号链接目标将位于“构build上下文”之外,而Docker不允许这样做。

在每个abc目录中硬连接Dockerfile将共享Docker的一个文件,但是对于像Git这样的源代码pipe理并不能很好地工作。

构build参数可能允许重用Dockerfile。 使用groups目录的docker docker build上下文,并且只要需要引用Dockerfile中的某个目录,就使用variables/参数。

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

然后运行

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