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

Eka*_*Eka 3 docker docker-image docker-container

我在我的系统中安装了一个带有大约 1 GB 操作系统的 docker 映像,然后我更新并安装了其他软件,将大小推到了近 2 GB。我使用这个容器创建了一个新的子图像docker commit <cont-id> <child-name>。现在我有两个 docker 镜像,父镜像和子镜像总大小为 3 GB。由于我有一个多余的 1 GB 父映像,因此我想将其删除。

Parent  image 1 GB
Child   image 2 GB
Run Code Online (Sandbox Code Playgroud)

我试图保留子图像并尝试删除父图像,docker rmi -f <image-id>但它给出了这个错误

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

然后尝试了这个解决方案,我尝试过sudo docker images --filter "dangling=true" -q --no-trunc但什么也没返回,也尝试过docker system prune显示 0 GB。

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

小智 6

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

您可以从输出中获取 repo 和标签 docker images

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

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


atl*_*ine 2

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

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

在此输入图像描述