我正在研究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}
即使我们删除了容器的基本图像,该容器也能正常工作。
该错误只是为了警告图像已用于制造容器吗?
如果回答为“否”,则删除图像后会发生什么问题?
答案 0 :(得分:0)
我只能概述为什么这样做是必要的,希望其他人可以详细说明。
Docker使用相对差异的只读层来构建最终状态。运行容器指定一个过程,该过程记录相对于映像的更改。但是,为了使其正常工作,Docker必须知道基本映像及其内容是什么。这就是为什么图像必须保持可用的原因。
我想考虑的方式是像Git这样的版本控制系统如何工作。仅显示本地更改是因为有固定参考(本地存储库)可用。
一个例子:假设一个图像包含file.txt
。容器过程开始并更改该文件的第一行。更改不会通过更改原始文件来存储,但会记录为差异。
当您的容器进程读取文件时,它将从映像中读取原始文件,并对容器进行了哪些更改。如果该图像不可用,则docker无法知道文件的当前内容,因为它只知道更改了什么。