如果我在Dockerfile中使用了一个env var,该env var是否烘焙到映像中?

时间:2019-06-12 17:42:09

标签: docker

我有一个Dockerfile,在其中我将env var用作入口点命令的一部分,如下所示: ENTRYPOINT "./docker-entrypoint.sh" ${MY_VAR}

我在运行容器时将MY_VAR设置为不同的值似乎可行,但是我不理解如何在不烘焙变量的情况下构建图像。构建后如何在图像中插入环境变量?

2 个答案:

答案 0 :(得分:2)

在Dockerfile中设置ENV会更新映像配置(这是与映像一起存储的一些json元数据)。运行容器时,图像元数据用于填充容器的默认设置。由于它们是默认值,因此您可以根据需要从docker run命令行或撰写文件中覆盖变量。由于您可以在运行时覆盖它们,因此除非在图像构建期间在RUN命令中使用它们,否则这些值不会真正“嵌入”到图像中。

图像的不可变性是对图像层的参考。为映像创建文件系统层后,您将无法从docker修改该层。您可以用另一层扩展该层(替换或删除上一层的内容)。您可以创建一个新层并将图像指向该组新层。但是,sha256校验和所引用的图层内容不会被容器或其他构建步骤更改,从而允许在多个图像和容器之间共享图层。

答案 1 :(得分:0)

这是我一直在寻找的信息(docker docs),正如Sergio在开发人员可能希望在运行时设置的图像的某些部分上面所说的那样,它们是有意重写的,而ENTRYPOINT是其中之一。

相关问题