我如何删除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)