来自子dockerfiles中基础DockerFile的引用变量?

时间:2018-01-23 20:46:02

标签: docker

我目前正在将巨大的DockerFile拆分为单独的DockerFiles,但是巨大的DockerFile中定义的一些变量需要在单独的DockerFiles中使用。 Docker是否有在一组DockerFiles或其他一些继承机制中导入公共变量的概念?

我希望避免在多个dockerfiles中维护重复变量。

举个例子:

ARG basic_user="user"
USER ${basic_user}

2 个答案:

答案 0 :(得分:1)

Dockerfiles中的ENV值是持久的,它们由后代Dockerfiles继承。 Dockerfile ENV

另一方面,ARG值不会保留,因此不是固有的后代Dockerfiles。 Dockerfile ARG

答案 1 :(得分:0)

我相信您正在寻找的是 ONBUILD 命令。 Docker ONBUILD command。此命令将允许子容器继承在父Dockerfile中声明的命令,并由任何使用父级作为基本映像的子Dockerfiles使用。

以下是一个例子:

父Dockerfile

FROM ubuntu:latest
ONBUILD ARG ARG_1=arg1
ONBUILD ENV CHILD_VAR=${ARG_1}
ONBUILD ENTRYPOINT ["printenv"]

为了这个例子,我将这个Dockerfile构建为docker build -t parent .

子Dockerfile

FROM parent:latest

将此Dockerfile构建为docker build -t child .此子容器现在将具有一个环境变量,该变量具有ARG_1从父级指定的值。使用以下内容对此进行测试,您将得到结果arg1

docker run --name=child child CHILD_VAR

重要的是要注意,在此示例中,通过使用ONBUILD,父级将不具有名为CHILD_VAR的环境变量,也不具有指定的入口点。只有使用父作为基本图像的Dockerfiles才会。