gpt4 book ai didi

docker - 为什么当我删除容器引用的图像时 docker 会抛出错误?

转载 作者:行者123 更新时间:2023-12-02 19:26:59 25 4
gpt4 key购买 nike

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

错误信息

来自守护程序的错误响应:冲突:无法删除存储库引用“hello-world”(必须强制)- 容器 6a2e5242c2ac 正在使用其引用的图像 fce289e99eb9

本以为把镜像去掉,再启动容器就会出问题,结果再启动容器就完全没问题了。

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

docker run hello-world

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

docker ps -a

将会有一个停止的容器,它的镜像名称是“hello-world”,它会有一个 ID

docker rmi -f hello-world

如果没有“-f”,Docker 将在删除它时抛出错误。

docker start -i {容器的 ID}

即使我们删除了容器的基础镜像,容器仍然运行良好。

enter image description here

enter image description here

这是我的问题。

  1. 报错只是提示图片已被用于制作容器吗?

  2. 如果答案为“否”,删除图像后会出现什么问题?

最佳答案

我只能提供一个鸟瞰图,说明为什么这是必要的,希望其他人可以详细说明。

Docker 使用相对差异的只读层来构建最终状态。运行一个容器指定一个进程记录相对于镜像的变化。然而,为了让它工作,Docker 必须知道基础镜像及其内容是什么。这就是图像必须保持可用的原因。

我喜欢思考这个问题的方式是像 Git 这样的版本控制系统是如何工作的。仅因为固定引用(本地存储库)可用,才会显示您的本地更改。

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

关于docker - 为什么当我删除容器引用的图像时 docker 会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55469022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com