无法删除具有依赖子映像的docker映像

283

我正在尝试

docker rmi c565603bc87f

错误:

来自守护程序的错误响应: 冲突: 无法删除c565603bc87f(不能被强制) - 镜像有依赖的子镜像

所以即使使用-f标志也无法删除镜像。如何删除镜像以及其所有子镜像?

Linux和docker版本:

uname -a Linux goracio-pc 4.4.0-24-generic #43-Ubuntu SMP Wed Jun 8 19:27:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

docker version 客户端: Version: 1.11.2 API version: 1.23 Go version: go1.5.4 Git commit: b9f10c9 Built: Wed Jun 1 22:00:43 2016 OS/Arch: linux/amd64

服务器: Version: 1.11.2 API version: 1.23 Go version: go1.5.4 Git commit: b9f10c9 Built: Wed Jun 1 22:00:43 2016 OS/Arch: linux/amd64


也许这个可以帮助:https://gist.github.com/Siva-Charan/db7bd84ad2ca2b0779d87a75e6bb4176 - Gujarat Santana
2
从最新到最旧按标签删除。如果它们存在于存储库中,则在任何Dockerfile需要它们时将被拉取。 - rafaelbattesti
你应该接受Nguyen提供的(非常好的)答案。 - jpw
25个回答

0

如果您在公司代理后面,请确保您没有遇到速率限制错误

如果您恰好在公司代理后面并且使用Windows,则可以尝试此简单的修复方法。我在这里找到了几个有用的响应。但是,即使运行了docker image prune和其他命令,我仍然发现了可爱的错误(以及根本原因),这些错误以前被掩盖:“toomanyrequests:您已达到拉取速率限制...”

修复方法:

  1. 打开Windows终端/DOS提示符并输入:
  • ipconfig/release
  • [...]
  • ipconfig/renew

这可能会让你免去向IT求助的麻烦。;)


0
假设我们有一个Dockerfile。
FROM ubuntu:trusty
CMD ping localhost

我们从中构建图像,没有标签或命名

docker build .

现在我们有一个成功的报告 "Successfully built 57ca5ce94d04" 如果我们查看 Docker 镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              57ca5ce94d04        18 seconds ago      188MB
ubuntu              trusty              8789038981bc        11 days ago         188MB

我们需要先移除以下代码:

docker rmi 57ca5ce94d04

然后执行以下操作:

docker rmi 8789038981bc

这将会移除那张图片!

有人建议强制删除所有内容。

docker rmi $(docker images -q) -f

我对每个这样的图像都会收到“不能强制转换”的错误信息。 - vladkras

0

只需简单地使用:

docker rmi <image:tag> -f

例如:

docker rmi ubuntu:latest -f 

将使用标签名为latestubuntu镜像名称删除,并使用-f参数进行强制删除。

这对我很有效。


-1

图像层: 仓库通常被称为镜像或容器镜像,但实际上它们由一个或多个层组成。仓库中的图像层以父子关系连接在一起。每个图像层表示它与父层之间的更改。

Docker构建模式使用继承。这意味着版本 i 依赖于版本i-1。因此,我们必须删除版本+1才能删除版本 i 。这是一个简单的依赖关系。

如果您想要删除除最后一个(最新的)和第一个(基础)之外的所有图像,则可以使用以下 docker save 命令导出最后一个(最新的)。

docker save -o <output_file> <your_image-id> | gzip <output_file>.tgz

接下来,使用以下图像ID删除所有图像。

docker rm -f <image-id i> | docker rm -f <image i-1> | docker rm -f <image-id i-2> ... <docker rm -f <image-id i-k> # where i-k = 1

现在,按照以下方式加载您保存的tgz镜像。

gzip -c <output_file.tgz> | docker load

使用docker ps -q命令查看已加载镜像的image-id。它没有标签和名称。您可以像下面这样简单地更新标签和名称。
docker tag <image_id> group_name/name:tag

-2

你可以这样做:

➜ ~ sudo docker rmi 4ed13257bb55 -f 已删除: sha256:4ed13257bb5512b975b316ef482592482ca54018a7728ea1fc387e873a68c358 已删除: sha256:4a478ca02e8d2336595dcbed9c4ce034cd15f01229733e7d93a83fbb3a9026d3 已删除: sha256:96df41d1ce6065cf75d05873fb1f9ea9fed0ca86addcfcec7722200ed3484c69 已删除: sha256:d95efe864c7096c38757b80fddad12819fffd68ac3cc73333ebffaa42385fded


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接