Docker rmi无法删除镜像。

7

我有一些未标记的图像在我的主机上。我使用以下命令删除这些图像:

sudo docker rmi $(sudo docker images | grep "<none>" | awk '{print($3)}')

但是执行时,我遇到了错误:

Error response from daemon: Conflict, cannot delete 31fa814ba25a because the container 70c20aa2c19f is using it, use -f to force

因此,我执行以下操作:

sudo docker rmi 70c20aa2c19f

我遇到了错误,错误信息如下:

Error response from daemon: No such image: 70c20aa2c19f

如果没有ImageID为70c20aa2c19f的镜像,那么为什么最初的删除命令会报告存在ImageID为70c20aa2c19f的镜像呢?


1
它说 容器70c20aa2c19f正在使用它。请先尝试删除该容器。docker rm 70c20aa2c19f - Dharmit
1
那么 sudo docker ps -a 呢?它显示任何容器吗? - Dharmit
一个问题:ps -a 列出的容器没有在运行,如果我理解正确的话。如果是这样,为什么 Docker 不让我删除镜像? - amrx
您可以使用类似于 sudo docker rm $(sudo docker ps -qa) 的命令。 - Dharmit
让我们在聊天中继续这个讨论。点击此处进入聊天室 - Dharmit
显示剩余3条评论
5个回答

6
正如您问题上的评论所示,您已经发现需要使用以下命令:
  • docker rmi来删除镜像
  • docker rm来删除容器
稍微解释一下:有以下三种情况:
  1. Docker 镜像
  2. 基于该镜像运行的容器
  3. 基于该镜像的已停止容器
停止的容器会被保留,因为运行容器可能会更改容器中的文件系统,然后您可以提交此已停止的容器以获得新镜像(这是手动运行命令并提交所得容器的一种方式)。
使用 docker build 和 Dockerfile 创建镜像时也是同样的过程,它运行Dockerfile命令执行容器,并提交所得镜像,只标记最后提交的镜像。

使用命令docker image prune可以删除未使用的镜像。还有一个用于删除未使用卷的命令 - docker volume prune。 - Daniel Eagle
1
@DanielEagle 这些命令是在 Docker 1.13 中添加的 - 是的。另请参阅 docker system prune 来修剪镜像、容器和卷。 - Vincent De Smet
我应该提到它们是较新的命令,但想抛出这个评论来补充你的答案。感谢另一个命令来处理所有事情,因为对于那些不想打太多字的人来说,它非常有效。 :) - Daniel Eagle

1
以下命令对我非常有效,只需继续添加grep -v即可保留所需的所有容器:
sudo docker rm -f $(sudo docker ps -a -q | grep -v <good_container_1> | grep -v <good_container_2>)

0

对我没用。没有创建容器,但 rmi 表示镜像不存在。

msoulier@deimos:~/work/mbgdocker$ docker images
REPOSITORY                   TAG              IMAGE ID       CREATED       SIZE
multiarch/qemu-user-static   register         ed40092460e6   4 weeks ago   1.26MB
multiarch/qemu-user-static   x86_64-aarch64   04f21107bea2   4 weeks ago   9.83MB
msoulier@deimos:~/work/mbgdocker$ docker rmi 04f21107bea2
Error: No such image: 04f21107bea2
msoulier@deimos:~/work/mbgdocker$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
ode here

0

首先,您需要删除属于Docker镜像的容器。 然后您可以删除Docker镜像。我尝试过了,它运行得很好。


1
这可以作为评论提交。 - VVN

0
该信息告知一个容器正在使用该镜像,但容器已停止,而该镜像仍与该容器相关联。若要移除该镜像,您需要先通过docker rm [容器ID]命令来删除容器。删除容器后,请执行docker rmi [镜像ID]命令以删除镜像。

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