在子DockerFile中引用基础DockerFile中的变量?
我目前正致力于将一个巨大的DockerFile拆分为单独的DockerFile,但是在巨大的DockerFile中定义的一些变量需要在单独的DockerFile中使用。Docker是否有跨一组DockerFile或其他继承机制导入公共变量的概念 我希望避免在多个DockerFile中维护重复的变量 例如:在子DockerFile中引用基础DockerFile中的变量?,docker,Docker,我目前正致力于将一个巨大的DockerFile拆分为单独的DockerFile,但是在巨大的DockerFile中定义的一些变量需要在单独的DockerFile中使用。Docker是否有跨一组DockerFile或其他继承机制导入公共变量的概念 我希望避免在多个DockerFile中维护重复的变量 例如: ARG basic_user="user" USER ${basic_user} 我相信您需要的是ONBUILD命令。此命令将允许子容器继承在父Dockerfile中声明的命令,并由将父Do
ARG basic_user="user"
USER ${basic_user}
我相信您需要的是ONBUILD命令。此命令将允许子容器继承在父Dockerfile中声明的命令,并由将父Dockerfile用作基础映像的任何子Dockerfile使用 下面是一个例子:
ARG basic_user="user"
USER ${basic_user}
父Dockerfile
在本例中,我将此Dockerfile构建为docker build-t父文件。
子Dockerfile
将此docker文件生成为docker Build-t子容器。
此子容器现在将具有一个环境变量,其值由父容器中的ARG_1指定。用以下方法测试,您将得到结果arg1
:
docker run --name=child child CHILD_VAR
需要注意的是,在本例中,通过使用ONBUILD,父级将不会有一个名为CHILD_VAR的环境变量,也不会有指定的入口点。只有将父级用作基础映像的DockerFile才会被保存。DockerFile中的
ENV
值将被持久化,并由子DockerFile继承
另一方面,
ARG
值不会持久化,因此不是固有的后代DockerFile 我们在这里讨论的是什么类型的变量-ARG
,ENV
,shell变量,什么?用简单的例子更新了帖子但是我可以用父dockerfile中的值引用子dockerfile中的父var ARG_1吗?是的,你也可以这样做。在这种情况下,您只需在父级中有onbuildarg ARG ARG\u 1=arg1
,然后在子级中可以通过扩展引用它-例如ENV child\u VAR=$ARG\u 1
docker run --name=child child CHILD_VAR