为什么在删除容器引用的映像时docker会引发错误?

时间:2019-04-02 07:19:36

标签: docker docker-compose

我正在研究Docker,但对Docker引发的错误感到好奇。 当我尝试删除容器引用的映像时,Docker抛出错误提示

错误消息

Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 6a2e5242c2ac is using its referenced image fce289e99eb9

我以为如果删除图像,则再次启动容器时会出现问题,但是再次启动容器完全没有问题。

以下是描述我的问题的一些步骤。

docker run hello-world

容器运行良好,终端中会显示一些消息。

docker ps -a

将有一个停止的容器,其图像名称为“ hello-world”,并且具有ID

docker rmi -f hello-world

不带“ -f”的情况下,Docker将删除它会引发错误。

docker start -i {ID of the CONTAINER}

即使我们删除了容器的基本图像,该容器也能正常工作。

enter image description here

enter image description here

这是我的问题。

  1. 该错误只是为了警告图像已用于制造容器吗?

  2. 如果回答为“否”,则删除图像后会发生什么问题?

1 个答案:

答案 0 :(得分:0)

我只能概述为什么这样做是必要的,希望其他人可以详细说明。

Docker使用相对差异的只读层来构建最终状态。运行容器指定一个过程,该过程记录相对于映像的更改。但是,为了使其正常工作,Docker必须知道基本映像及其内容是什么。这就是为什么图像必须保持可用的原因。

我想考虑的方式是像Git这样的版本控制系统如何工作。仅显示本地更改是因为有固定参考(本地存储库)可用。

一个例子:假设一个图像包含file.txt。容器过程开始并更改该文件的第一行。更改不会通过更改原始文件来存储,但会记录为差异。 当您的容器进程读取文件时,它将从映像中读取原始文件,并对容器进行了哪些更改。如果该图像不可用,则docker无法知道文件的当前内容,因为它只知道更改了什么。