我如何删除Docker的图像?

我有以下图片:

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 

我怎样才能删除它们? 为什么会有这样的冲突?

为了删除所有的图像,使用给定的命令

 docker rmi $(docker images -q) 

为了删除所有的容器,使用给定的命令

 docker rm $(docker ps -a -q) 

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

此解决scheme由Techoverflow.net提供。

可能的原因:原因可能是这个图像当前被一个正在运行的容器使用。 在这种情况下,您可以列出正在运行的容器,停止相关的容器,然后删除图像:

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

如果您无法通过docker ps查找容器,则可以使用此列出所有已经退出的容器并将其删除。

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

注:如果使用Volume-Only容器, 请小心删除所有已退出的容器。 这些保持Exit状态,但包含有用的数据

错误的原因是,尽pipe图像没有任何标签,但在该图像上仍然存在可能处于exited状态的容器。 因此,您需要确保已经停止并删除了在这些图像上创build的所有容器。 以下命令帮助您删除所有未运行的容器:

 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` 

在bash中:

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

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

图像可能正在被正在运行的容器使用,所以您首先必须停止并移除容器。

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

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

 docker rmi <image-id> 

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

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

要解决这些特殊情况,您可以使用以下命令强制删除图像:

 docker rmi -f <image-id> 

我在这个命令中find了答案:

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

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

删除所有的容器

 docker ps -q -a | xargs docker rm 

强制删除所有泊坞窗图像

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

由于Docker ver。 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 

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

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

然后,使用以下命令通过其ID删除图像

 sudo docker rmi <image-id> 

您必须先停止/删除在该图像上创build的所有不必要的容器。

看看: 如何删除旧的Docker容器 。

之后使用@marcell解决scheme。

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

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

如果要自动/定期清理已退出的容器,并删除正在运行的容器未使用的图像和卷​​,则可以下载此图像融水/docker清理。

这样你就不需要手工清理它

赶紧跑:

 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的镜像,你必须执行下面的命令:

 $ docker rmi <docker_image_id> 

所以,要删除所有的Docker镜像,你可以执行下面的命令:

 $ docker rmi $(docker images -q) 

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

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