守护程序的错误响应:冲突:无法删除2602b4852593(无法强制)-镜像具有依赖的子镜像。

6

我无法删除 Docker 镜像,出现以下错误。

docker image rm -f $(docker image ls -aq)
Error response from daemon: conflict: unable to delete 6ab53ec1a8c9 (cannot be forced) - image is being used by running container d65f1c6b7982
Error response from daemon: conflict: unable to delete 2602b4852593 (cannot be forced) - image has dependent child images

Docker版本:

docker --version
Docker version 17.05.0-ce, build 89658be
2个回答

8

问题

来自守护程序的错误响应: 冲突: 无法删除6ab53ec1a8c9(不能被强制), 正在使用该镜像的正在运行的容器是d65f1c6b798。

正如消息所说,你正在运行一个使用你要删除的镜像的容器,因此出现了错误。

你可以停止容器,然后再运行命令,但更好的方法存在...

更好的方式

docker image rm -f $(docker image ls -aq)

与旧版本中使用的上述 hack不同,你现在可以使用:

docker image prune -a

使用标志-a将删除所有未使用的Docker镜像,这意味着正在运行容器使用的镜像不会被触及,因此这可能是您想要使用的内容以实现您尝试做的事情。
如果您只想删除悬空的镜像而不删除已经构建的镜像,则可以运行相同的命令,但不带-a标志:
docker image prune

这是有关IT的帮助:

docker image prune --help                                                                                                                                                                                 
Usage:  docker image prune [OPTIONS]

Remove unused images

Options:
  -a, --all             Remove all unused images, not just dangling ones
      --filter filter   Provide filter values (e.g. 'until=<timestamp>')
  -f, --force           Do not prompt for confirmation

我甚至使用了 docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q) 命令来停止并删除所有容器。但是在我的情况下,这并没有帮助我摆脱在之后删除镜像时出现的错误信息,我不得不使用 docker image prune -a 命令来删除所有镜像 - 因为在停止和删除所有容器后,我忘记重新运行容器(当使用该修剪命令时应该这样做以保留它们的镜像)。 - questionto42
我不认为这是一个好的做法。正如前面的评论所提到的,你可能会因为忘记在修剪之前运行它们而删除所有的图像。毕竟,如果你已经有来自无关项目的不同图像,而不仅仅是保留它们之间依赖关系的子图像,那么会发生什么呢? - cestpasmoi
1
只需运行不带 -a 标志的命令即可。 - Exadra37

0

此答案所建议,您可以通过逐个删除所有子图像来运行

docker rmi <repo:tag>

然而,正如链接答案中所建议的那样,在某些情况下,您可能不希望通过指定具有多个标签的图像ID来删除图像,因为这些标签可能被其他图像使用。


1
您可能更喜欢只运行 docker image prune 命令,它将删除所有悬空镜像或者您喜欢称之为子镜像。请注意,不使用 -a 标志,因此保留了您当前的所有镜像。 - Exadra37
好的,现在事情开始变得有意义了 - 非常感谢! - cestpasmoi
如果您收到“必须强制执行”(而不是“无法强制执行”)的消息,则此命令是唯一可以帮助您的命令(尽管这不是问题所在)。我运行了 docker rmi 123451344 234143244 123413424 等一长串命令,删除所有阻塞镜像,然后才能从头开始重新启动 Docker。请参见Docker错误:无法删除Docker容器,冲突:无法删除存储库引用 - questionto42

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