如何删除Docker's图像?

我有以下图片:

alex@alexvps:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              70c0e19168cf        5 days ago          1.069 GB
<none>              <none>              c2ce80b62174        8 days ago          399.2 MB
<none>              <none>              60afe4036d97        8 days ago          325.1 MB

当我试图删除其中一个时,我会得到:

alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images

我该如何移除它们?为什么会有这样的冲突?

253506 次浏览

< >强可能的原因: 原因可能是当前正在运行的容器正在使用该映像。在这种情况下,你可以列出正在运行的容器,停止相关的容器,然后删除图像:

docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>

如果你不能通过docker ps找到容器,你可以使用它列出所有已经退出的容器并删除它们。

docker ps -a | grep 60afe4036d97
docker rm <containerid>

如果你使用Volume-Only容器,注意: 小心立即删除所有退出的容器。它们保持在Exit状态,但是包含有用的数据

在Bash中:

for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done

这将删除所有名称为“<none>”的图像。我发现那些图片是多余的。

首先必须停止/删除在映像上创建的所有不必要的容器。

来看看:如何删除旧Docker容器

之后使用@marcell溶液。

我在这条命令中找到了答案:

docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi

当我删除一些正在使用的图像时,我有你的问题,我没有意识到(使用docker ps -a)。

错误的原因是,即使图像没有任何标签,仍然存在一个在该图像上创建的容器,该容器可能处于exited状态。因此,您需要确保已经停止并删除了在这些映像上创建的所有容器。使用实例删除所有未运行的容器:

docker rm `docker ps -aq --no-trunc --filter "status=exited"`

现在这删除了所有悬垂的非中间<none>图像:

docker rmi `docker images --filter 'dangling=true' -q --no-trunc`

停止所有正在运行的容器:

docker stop `docker ps -q`

要删除所有图像,请使用给定的命令

docker rmi $(docker images -q)

要删除所有容器,请使用给定的命令

docker rm $(docker ps -a -q)

警告:这将破坏你所有的图像和容器。这是不可能恢复的!

此解决方案由Techoverflow.net提供。

首先,使用以下命令删除所有容器

sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}

然后,使用以下命令根据映像的ID删除映像

sudo docker rmi <image-id>

映像当前可能由正在运行的容器使用,因此首先必须停止并删除容器。

docker stop <container-name>
docker rm <container-id>

然后你可以尝试删除图片:

docker rmi <image-id>

必须确保此映像不依赖于其他映像(否则必须先删除它们)。

我有一个奇怪的情况,我没有更多的容器仍然活着(docker ps -a返回什么),但我不能设法删除图像和它的图像依赖。

为了解决这些特殊情况,你可以强制图像删除:

docker rmi -f <image-id>

删除所有未标记图像的命令的最紧凑版本是:

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

移除所有容器

docker ps -q -a | xargs docker rm

强制删除所有Docker映像

docker rmi -f $(docker images -f dangling=true -q)

如果你想自动/定期清理退出的容器,并删除运行中的容器不使用的镜像和卷,你可以下载Docker镜像meltwater/docker-cleanup

这样你就不需要亲自去清理了。

运行:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

它将每30分钟运行一次(或使用DELAY_TIME=1800选项设置的时间),并清理退出的容器和图像。

更多详细信息:https://github.com/meltwater/docker-cleanup/blob/master/README.md

从Docker开始。1.13.0(2017年1月)有system prune命令:

$ docker system prune --help


Usage:  docker system prune [OPTIONS]


Remove unused data


Options:
-a, --all     Remove all unused images not just dangling ones
-f, --force   Do not prompt for confirmation
--help    Print usage

要删除一些Docker镜像,必须执行以下命令:

$ docker rmi <docker_image_id>

因此,要删除所有Docker映像,可以执行以下命令:

$ docker rmi $(docker images -q)

现在,如果你想删除所有的Docker映像(包括正在使用的映像),你可以添加标记-f,例如:

$ docker rmi -f $(docker images -q)

你可以简单地在命令末尾添加--force。如:

sudo docker rmi <docker_image_id> --force

为了使它更聪明的,你可以添加as:

首先停止所有正在运行的容器。

sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')

现在移除容器

sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')

现在作为最后一步,删除docker映像

sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force

docker ps中$1是第一列,即Docker容器ID。

docker images $3是第三列,即Docker映像ID。

注意:在上述命令中,sudo被使用,以防你可能/可能没有执行命令的特权。如果它给你错误,尝试删除sudo

使用

docker image prune -all

docker image prune -a

删除所有悬挂的图像。如果指定了-a,它也将删除所有未被任何容器引用的图像。

注意:你被提示确认之前,修剪删除任何东西,但你不会显示一个列表,什么将被潜在地删除。此外,docker image ls不支持负过滤,因此很难预测哪些图像将被删除。

Docker的文档修剪中所述。

除了Sunny的回答:

为了在PowerShell窗口中在Windows机器上(使用Docker for Windows)执行删除所有图片,请执行:

docker images -q | %{docker rmi -f $_}

为了在PowerShell窗口中在Windows机器上(使用Docker for Windows)执行删除所有容器,请执行:

docker ps -a -q | %{docker rm -f $_}

我已经找到了一个解决方案与Powershell脚本,这将为我。

该脚本首先停止所有容器,然后删除所有容器,然后删除由用户命名的图像。

看这里http://www.devcode4.com/article/powershell-remove-docker-containers-and-images