在 docker 中提交子图像后如何删除父图像?

How to delete parent image after committing to a child image in docker?

我在我的系统中安装了一个 docker 图像 OS 大约 1 GB,然后我更新并安装了额外的软件,将大小推到了近 2 GB。 docker commit <cont-id> <child-name> 我用这个容器创建了一个新的子图像。现在我有两个 docker 图像,父图像和子图像总计 3 GB。因为我有多余的 1 GB 父图像,所以我想将其删除。

Parent  image 1 GB
Child   image 2 GB

我试图保留子图像并尝试通过 docker rmi -f <image-id> 删除父图像,但出现此错误

Error response from daemon: conflict: unable to delete 5dvd3054h756 (cannot be forced) - image has dependent child images

然后尝试了 this solution,我尝试了 sudo docker images --filter "dangling=true" -q --no-trunc 但什么也没返回,还尝试了 docker system prune 显示 0 GB。

我还计划将其他程序安装到 docker 内的 OS,因此想从现有的子图像生成新的子图像。我到处搜索并没有很好的解决方案来删除 docker 中的父图像以及我阅读的原因是因为子图像使用了一些父层。生成新子图像后是否无法删除 docker 中的父图像?

容器由不同的 docker 图像层组成,如下所示。

所以当你向容器中添加新的东西,最后把它做成另一个镜像时,你只是在原来的镜像层上添加一个新层,所以不需要删除基础镜像层,它们是由你的新镜像共享的容器。另外,只有有了这些基础镜像层,你的新镜像才有可能形成一个新的容器。

而不是 docker rmi <image_id> 使用 docker rmi <repo:tag>

您可以从 docker images

的输出中获取 repo 和标签

@atline 的答案是答案的理论部分。这里提到的是删除相同基础镜像的先前版本的方法,因为子(或较低层)不会 deleted/affected

学分: