考虑到以下文件系统结构:
我想执行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,而不必将相同的文件复制到子文件夹等。
答案 0 :(得分:1)
由于与Dockerfile相同的原因,符号链接在这种情况下不起作用,符号链接目标将在“构建上下文”之外,而Docker不允许这样做。
在每个a
,b
和c
目录中硬链接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 .