【问题标题】:How to delete parent image after committing to a child image in docker?在docker中提交子图像后如何删除父图像?
【发布时间】:2019-03-04 00:05:28
【问题描述】:

我在我的系统中安装了一个操作系统约为 1 GB 的 docker 映像,然后我更新并安装了其他软件,将大小推到了近 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> 删除父图像,但它给出了这个错误

来自守护程序的错误响应:冲突:无法删除 5dvd3054h756(无法强制)- 图像具有依赖的子图像

然后尝试了this solution,我尝试了sudo docker images --filter "dangling=true" -q --no-trunc,但没有返回任何内容,还尝试了docker system prune,显示为0 GB。

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

【问题讨论】:

  • 您的情况没有多余的图像层。这两个新映像将共享一个映像层(您最初构建的操作系统映像)。所以磁盘使用不是3GB,你可以用du -sh查看。
  • 你能列出你在创建子图像之前运行的命令吗?

标签: docker docker-container docker-image


【解决方案1】:

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

你可以从docker images的输出中获取repo和tag

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

学分:https://stackoverflow.com/a/50650745/5711056

【讨论】:

  • 此评论对于删除具有依赖子图像的图像很有用,感谢这对我有帮助。
【解决方案2】:

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

因此,当您向容器添加新内容并最终将其作为另一个镜像时,您只需在原始镜像层上添加一个新层,因此无需删除基础镜像层,它们由您的新容器共享。此外,只有有了这些基础镜像层,你的新镜像才有可能形成一个新的容器。

【讨论】:

  • 但是,他仍然会遇到这个问题(留下多个无用的图像,这些图像只对基于它构建的下一个图像有用)。他可能只使用最后一张图片。
猜你喜欢
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 2016-09-12
相关资源
最近更新 更多