停止的容器正在使用图像

Meh*_*aki 38 docker docker-container

我试图通过此命令删除docker容器:

docker rmi <Image-Id>
Run Code Online (Sandbox Code Playgroud)

显然,我已经用我使用的Id替换了Image-Id:

docker images
Run Code Online (Sandbox Code Playgroud)

但我看到下面的错误:

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

Adi*_*iii 50

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

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

  docker rmi -f <image_id> 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,它工作正常,但有一个问题。我删除了一个 10 GB 的映像,但删除后,我看不到可用磁盘空间有任何变化。 (2认同)
  • 您是否删除了与图像附加的卷以及您是否检查了每个卷的图像大小 (2认同)
  • 不是真的,我是码头工人的新手。我将尝试该工具。顺便问一下,我可以使用命令行来检测音量并删除它们吗? (2认同)
  • 是的 docker 卷 ls ;列出卷并删除 docker volume rm v_id (2认同)
  • 要了解背后的真正问题,请阅读 angus 的答案 (2认同)

小智 30

您必须先移除容器。
强制是最后一种方法。

#check container
docker ps -a

#remove container
docker rm containerID
Run Code Online (Sandbox Code Playgroud)

  • 显然是最好的答案。唯一解释如何获取已停止容器列表的人。 (4认同)

Dav*_*aze 21

您需要删除已停止的容器docker rm,然后您可以删除它使用的图像docker rmi.

  • 使用“docker ps -a” (10认同)
  • 如何列出已停止的容器?`docker ps` 为空 (4认同)
  • 这是任何完整答案的一部分。您可以强制删除或删除已停止的图像。 (2认同)

Ang*_*gus 10

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

docker rm  $(docker ps -q -a)
Run Code Online (Sandbox Code Playgroud)

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

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

docker image rm <image_id>
Run Code Online (Sandbox Code Playgroud)

  • @CloudCho 这个怎么样?https://www.freecodecamp.org/news/how-to-remove-images-in-docker/ (2认同)

Eri*_*ric 9

除了其他答案之外,我在使用 Docker for Mac 时遇到了同样的问题,但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
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

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

docker stop 容器 ID 和 docker rm 容器 ID

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

下面的链接给出了一些额外的信息。干杯。!

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


ari*_*wan 5

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

停止所有正在运行的容器

docker stop $(docker ps -aq)
Run Code Online (Sandbox Code Playgroud)

移除所有容器

docker rm $(docker ps -aq)
Run Code Online (Sandbox Code Playgroud)

删除所有图像

docker rmi $(docker images -q)
Run Code Online (Sandbox Code Playgroud)


Edw*_*ard 5

如果目标是回收磁盘空间,另一种尚未提及的方法是使用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
Run Code Online (Sandbox Code Playgroud)

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