已停止的容器正在使用图像

我试图通过以下命令删除一个码头容器:

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
163703 次浏览

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

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

如果使用-f 标志并指定图像的短 ID 或长 ID,则 此命令取消标记并删除与指定的 身份证。

  docker rmi -f <image_id>

注意: 此命令将删除容器正在使用的映像。

如果您已经改变了在 Dockerfile和如果您正在使用多克合成,您可以只是重建您的形象运行 docker-compose--build选项!

您还可能发现您已经停止了导致锁定的容器。请首先使用以下方法移除这些容器:

docker rm  $(docker ps -q -a)

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

下一步,返回并删除图像使用:

docker image rm <image_id>

多克容器运行在多克图像之上,只有当一个图像没有附加到任何容器时才能删除它。!所以你必须停止容器和删除容器,然后你可以删除图像 ID。

码头停止容器-标识和 码头集装箱标识码头集装箱标识码

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

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

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

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

#check container
docker ps -a


#remove container
docker rm containerID

除了其他答案之外,我在使用 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

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

如果您希望删除这些图像,您需要通过 Docker for Mac 应用程序禁用 Kubernetes,然后再试一次。

如果 docker rmi <image-id>不起作用,试试这个:

停止所有正在运行的容器

docker stop $(docker ps -aq)

移走所有容器

docker rm $(docker ps -aq)

删除所有图像

docker rmi $(docker images -q)

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

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

如果通过传递—— name 创建了 docker 映像,则可以运行以下命令来删除容器

按名称运行 Docker 容器的示例

/usr/bin/docker run --restart=always --name=dynamodb_docker -p=8000:8000 -v amazon/dynamodb-local


docker stop /dynamodb_docker
docker rm /dynamodb_docker

因此,正确的格式可以删除下列码头容器:

docker stop /<CONTAINER NAME>
docker rm /<CONTAINER NAME>