我在努力

docker rmi c565603bc87f

错误:

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

所以我不能用-f标记删除image。如何删除图像,然后所有的孩子?

Linux和docker版本:

uname - 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

码头工人版本 客户: 版本:1.11.2 API版本:1.23 Go版本:go1.5.4 Git提交:b9f10c9 建成:2016年6月1日星期三22:00:43 OS /拱:linux / amd64

服务器: 版本:1.11.2 API版本:1.23 Go版本:go1.5.4 Git提交:b9f10c9 建成:2016年6月1日星期三22:00:43 OS /拱:linux / amd64


当前回答

扩展@Nguyen提供的答案-这个函数可以添加到你的.bashrc等,然后从命令行调用,以帮助清理任何有依赖子图像的图像错误…

您可以自己运行该函数,如果docker ps失败,那么它将使用sudo运行docker命令并提示您输入密码。

不会删除任何正在运行的容器的映像!

docker_rmi_dependants ()                                                                                                                                                         
{ 
  DOCKER=docker
  [ docker ps >/dev/null 2>&1 ] || DOCKER="sudo docker"

  echo "Docker: ${DOCKER}"

  for n in $(${DOCKER} images | awk '$2 == "<none>" {print $3}');
  do  
    echo "ImageID: $n";
    ${DOCKER} inspect --format='{{.Id}} {{.Parent}}' $(${DOCKER} images --filter since=$n -q);
  done;

  ${DOCKER} rmi $(${DOCKER} images | awk '$2 == "<none>" {print $3}')
}

我的.bashrc文件中也有这个…

docker_rm_dangling ()  
{ 
  DOCKER=docker
  [ docker ps >/dev/null 2>&1 ] || DOCKER="sudo docker"

  echo "Docker: ${DOCKER}"

  ${DOCKER} images -f dangling=true 2>&1 > /dev/null && YES=$?;                                                                                                                  
  if [ $YES -eq 1 ]; then
    read -t 30 -p "Press ENTER to remove, or CTRL-C to quit.";
    ${DOCKER} rmi $(${DOCKER} images -f dangling=true -q);
  else
    echo "Nothing to do... all groovy!";
  fi  
}

适用于:

$ docker --version 
Docker version 17.05.0-ce, build 89658be

其他回答

正在删除镜像id: b721d1cdaac7

docker rmi b721d1cdaac7 -f

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

删除所有子映像命令。

  docker image rm $(docker images --filter since=b721d1cdaac7 -q) -f

它将首先取消标记并删除所有子图像

我有这个问题,这里没有一个简短的答案,即使在上面@tudor提到的页面。我想在这里分享一下我是如何摆脱这些图像的。我想出了一个想法,从属图像必须是>=父图像的大小,这有助于识别它,以便我们可以删除它。

我按大小列出了这些图片,看看是否能发现其中的相关性:

docker images --format '{{.Size}}\t{{.Repository}}\t{{.Tag}}\t{{.ID}}' | sort -h -r | column -t

它所做的是使用docker中的一些特殊格式来首先定位图像大小列,然后以相反的顺序运行人类可读的排序。然后恢复易于阅读的列。

然后我查看<none>容器,并将列表中的第一个容器与类似的大小匹配。我在该图像上执行了一个简单的docker rmi <image:tag>,所有<none>子图像都随它而去。

所有子映像的问题映像实际上是我第一次开始使用docker时使用的该死的myrepo/getstart -lab映像。这是因为我从第一个创建链的测试图像中创建了一个新图像。

希望这能在某种程度上帮助到其他人。

强制删除图像列表(例如,不包括版本10)

Docker images | grep version | grep -v version10 > images.txt && for img in $(awk -F" " '{print $3}' /root/images.txt);码头工人做rmi吗 - f img美元;完成

正如这里所解释的,我使用以下方法来识别依赖图像并删除它们,

image_id=123456789012

docker images -a -q --filter since=$image_id |
xargs docker inspect --format='{{.Id}} {{.Parent}}'

你会看到类似这样的输出:

sha256:f7ef19862215ec0bf7a6b103504d213e1c001691703808f4154689cfbb5f14f9 sha256:a7d2efad2847bd10e5223980ed80f5781c716eddbf6131a3cf97614e7f2db97f
sha256:03690ae141346203959d0ae1b3e8d34b7a4232095d774af57dda6282fce99cc4 sha256:5713074659bb5352496ea680a903eba2f66e0495538c9db37336f4ba92994ea8
sha256:311f587811942d328edc52e5953d794eb9b81fe392512080d9fc1d350a6b2024 sha256:aa674f7f2621946db257720c378377b8714739d20879542d875b84c53b59bc75

然后你可以逐个删除这些图片,如下所示:

docker image rm f7ef19862215ec0bf7a6b103504d213e1c001691703808f4154689cfbb5f14f9

输出类似如下所示的内容:

Untagged: prathap/cognitive_robotics_gpu:v1
Untagged: prathap/cognitive_robotics_gpu@sha256:db6e7543a13e9a96241c985b9b3145b8fd65effb68c183301385b495875f1a5a
Deleted: sha256:03690ae141346203959d0ae1b3e8d34b7a4232095d774af57dda6282fce99cc4
Deleted: sha256:263f655670436758f8e3f23f31170083fc8d60c4eebe01a5b3fda1e73bed3ad1

正在删除镜像id: b721d1cdaac7

 docker rmi b721d1cdaac7 -f

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

删除所有子映像

docker image rm $(docker images --filter since=b721d1cdaac7 -q) -f