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

时间:2018-09-28 03:11:52

标签: docker docker-container docker-image

我在系统中安装了一个操作系统映像约为GB的docker映像,然后更新并安装了其他软件,该映像将其大小推升至将近2 GB。我使用此容器通过docker commit <cont-id> <child-name>创建了一个新的子图像。现在,我有两个泊坞窗映像,其父映像和子映像总计为3 GB。由于我有1 GB的冗余冗余父映像,因此我希望将其删除。

Parent  image 1 GB
Child   image 2 GB

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

  

守护程序的错误响应:冲突:无法删除5dvd3054h756(无法强制执行)-图像具有相关的子图像

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

我还计划在docker内部的操作系统上安装其他程序,因此希望从现有的子映像中生成新的子映像。我到处搜索,没有很好的解决方案在docker中删除父映像,这也是我读到的原因,因为子映像使用了某些父层。生成新的子映像后,是否无法删除docker中的父映像?

2 个答案:

答案 0 :(得分:2)

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

因此,当您向容器中添加新内容并最终使其成为另一个图像时,您只需在原始图像层上添加一个新层即可,因此无需删除基础图像层,它们将由您的新容器共享。另外,只有使用这些基本图像图层,您才能将具有自己图层的新图像形成一个新容器。

enter image description here

答案 1 :(得分:0)

使用docker rmi <image_id>代替docker rmi <repo:tag>

您可以从docker images的输出中获取存储库和标签

@atline的答案是答案的理论部分。此处提到的是删除同一基本映像的先前版本的方法,因为该子级(或较低层)不会被删除/受影响

信用:https://stackoverflow.com/a/50650745/5711056