Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果基本docker映像发生更改,从属映像是否会自动更改?_Docker - Fatal编程技术网

如果基本docker映像发生更改,从属映像是否会自动更改?

如果基本docker映像发生更改,从属映像是否会自动更改?,docker,Docker,假设我有一个Dockerfile,其中我使用FROM指令基于其他图像构建了一个图像 例如,我的图像名为extendedImage,从baseImage开始,然后安装其他内容 现在,假设baseImage得到更新。我使用docker pull baseImage获取更新。现在,如果我docker运行extendedImage,它会反映在baseImage中所做的更改吗?或者我必须首先再次docker build extendedImage,以使其反映更新后的baseImage?图像是由层构建的,每

假设我有一个Dockerfile,其中我使用FROM指令基于其他图像构建了一个图像

例如,我的图像名为
extendedImage
,从baseImage开始,然后安装其他内容


现在,假设
baseImage
得到更新。我使用
docker pull baseImage
获取更新。现在,如果我
docker运行extendedImage
,它会反映在
baseImage
中所做的更改吗?或者我必须首先再次
docker build extendedImage
,以使其反映更新后的
baseImage

图像是由层构建的,每个层的实际名称是其哈希值,而不是其标记

我有一个我称之为“foo”的图像,它是从“bar”构建的,但我真正拥有的是这个(最新的一层位于顶部):

尝试以下操作:
docker run-dfoo
,然后进行一些更改并
docker build-tfoo.

如果查看
docker ps
,您的容器仍在运行,但现在它没有“foo”标记,因为该标记已移动到某个新图像。但您的容器尚未更新
docker build
使用您在构建时拥有的标记,但它最终是用哈希名称构建图像
docker run
使用运行时的标记,但它最终是从散列名启动容器。这些标记只是被跟踪然后被遗忘的指针


编辑:虽然这是Docker在图像标签和容器名称方面的外观,但您的问题还有另一个部分,即是否可以交换底层。你不能。正如不可能在git历史的深处更改提交并让HEAD神奇地改变(您需要重写从该点到HEAD的整个历史),您也不可能更改较低的一层并让较高的一层“正常工作”。每一层都取决于它下面的层。

在使用“写时复制”策略的union文件系统上构建了一个映像。图像中的所有下层都是只读的,每次我们运行一个容器时,一个新的读写层被放置在顶部,而下层保持不变


现在,关键是您可以向基础图像添加新层,而不能更改基础图像的现有层。扩展图像将仅继续使用基础图像的现有层,新层将不在此处合并。因此,扩展图像不会改变

请参见,但我想,除非您构建,否则它不会反映更改,因为图像是不可变的。您可以对容器进行一些修改,提交更改,创建新映像,但第一个映像保持不变。谢谢,这很有帮助。这似乎表明,
docker运行extendedImage
将反映在
baseImage
中所做的更改,而无需重建
extendedImage
——我是否正确地解释了您?我编辑了我的答案,以便更清楚地说明:不,您不能按要求做。对图层的任何更改都需要重建其上方的所有图层才能看到该更改。
e3e4a61fae2f  <--- "foo"
70ba8fd71a0d
9b14cb475328
8e8d2e367ec2  <--- "bar"
8cf23a15c387
e3e4a61fae2f  <--- "<none>"
70ba8fd71a0d
9b14cb475328
8e8d2e367ec2
8cf23a15c387