图片已由停止的容器使用


99

我正在尝试通过以下命令删除Docker容器:

docker rmi <Image-Id>

显然,我用我得到的ID替换了Image-Id:

docker images

但是我看到下面的错误:

Error response from daemon: conflict: unable to delete <Image-ID> (must be forced) - image is being used by stopped container xxxxxxxxxxx

Answers:


127

您还可以使用--force , -f强制删除图像

如果使用-f标志并指定图像的短ID或长ID,则此命令将取消标记并删除所有与指定ID匹配的图像。

  docker rmi -f <image_id> 

1
谢谢,它工作正常,但是有问题。我删除了一个10 GB的映像,但是删除后,我的可用磁盘空间没有任何变化。
Mehrdad Babaki

1
您是否删除了带有图像的卷并检查了每个图像的大小
Adiii

1
并非如此,我是Docker的新手。我将尝试使用该工具。可以通过命令行检测音量并将其删除吗?
Mehrdad Babaki

1
是docker volume ls; 列出卷并删除,docker卷rm v_id
Adiii

42

您需要使用删除已停止的容器docker rm,然后才能使用删除其使用的图像docker rmi


3
这是任何完整答案的一部分。您可以强制删除或删除停止的图像。
bmacnaughton

31

您可能还会发现您已停止引起锁定的容器。首先删除这些使用:

docker rm  $(docker ps -q -a)

在这里,我们仅通过ID列出docker进程,然后将其删除;但是,docker rm只会删除停止的容器。

接下来,使用以下方法删除图像:

docker image rm <image_id>

23

您必须先删除容器。
强制是最后采取的方法。

#check container
docker ps -a

#remove container
docker rm containerID

3
显然,最佳答案。唯一一位解释如何获取已停止容器列表的人。
马可(Marco)

4

如果docker rmi <image-id>不起作用,请尝试以下操作:

停止所有正在运行的容器

docker stop $(docker ps -aq)

取出所有容器

docker rm $(docker ps -aq)

删除所有图片

docker rmi $(docker images -q)

3

除了其他答案,我在使用Mac的Docker时遇到了同样的问题,但是docker ps -a没有显示任何正在运行的容器。跑步docker images表演:

docker/desktop-storage-provisioner   v1.0                605a0f683b7b        2 months ago        33.1MB
k8s.gcr.io/kube-controller-manager   v1.15.5             1399a72fa1a9        6 months ago        159MB
k8s.gcr.io/kube-proxy                v1.15.5             cbd7f21fec99        6 months ago        82.4MB
k8s.gcr.io/kube-apiserver            v1.15.5             e534b1952a0d        6 months ago        207MB
k8s.gcr.io/kube-scheduler            v1.15.5             fab2dded59dd        6 months ago        81.1MB
docker/kube-compose-controller       v0.4.23             a8c3d87a58e7        11 months ago       35.3MB
docker/kube-compose-api-server       v0.4.23             f3591b2cb223        11 months ago       49.9MB
k8s.gcr.io/coredns                   1.3.1               eb516548c180        16 months ago       40.3MB
k8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        17 months ago       258MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

如果您启用了Kubernetes,则所有这些映像都将由Docker应用程序使用。在Docker for Mac首选项中,有一个关于Kubernetes的部分。如果单击“显示系统容器(高级)”,它们将出现在中docker ps

如果要删除这些图像,则需要通过Docker for Mac应用程序禁用Kubernetes,然后重试。


2

Docker容器在docker映像之上运行,只有未将映像附加到任何容器时,您才能删除该映像。因此,您必须停止容器并删除容器,然后才能删除图像ID。

docker stop container-id和docker rm container-id

然后尝试删除图像docker rmi image-id

以下链接提供了一些额外的信息。干杯。!

https://docs.docker.com/config/pruning/


在停止容器(docker-compose stop)->删除容器(docker rm <容器名称>)->删除关联的映像(docker rmi <image_id>)之后,这应该是正确的答案。
kta

1

如果目标是回收磁盘空间,则可以使用尚未提及的另一种方法docker system prune。它将打印警告,请注意:

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

这不会删除命名的图像,但是会清除中间的未命名的图像。根据您使用的容器的大小,这可以节省大量的磁盘空间。


0

如果您已经更改,Dockerfile并且使用的是docker compose,则可以通过运行docker-compose--build选项来重建映像!


如果您在上进行了任何更改,则Dockerfile不要自己删除图像,只需使用--build带有的标志,docker-compose以便它使用更改来重建新图像
ans1genie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.