我们如何使用驻留在不同于“当前构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不允许这样做。
在每个a
, b
和c
目录中硬连接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 .