45321 发表于 2016-5-13 09:57:01

docker中删除镜像的描述

docker中删除images的命令是docker rmi,但有时候执行此命令并不能删除images

docker@boot2docker:~$ docker images
REPOSITORY          TAG               IMAGE ID            CREATED             VIRTUAL SIZE
php               latest            d71bada8846a      8 days ago          489.8 MB
hello-world         latest            f1d956dc5945      2 weeks ago         967 B
docker@boot2docker:~$ docker rmi f1d956dc5945
Error response from daemon: Conflict, cannot delete f1d956dc5945 because the container 3e3f017a5df4 is using it, use -f to force
Error: failed to remove images:

可以看出,image并没有被删除,而且报错被占用,无法删除

查看docker的帮助会发现有两个与删除有关的命令rm和rmi

    rm Remove one or more containers
    rmi Remove one or more images

这里有两个不同的单词,images和container。其中images很好理解,跟平常使用的虚拟机的镜像一个意思,相当于一个模版,而container则是images运行时的的状态。docker对于运行过的image都保留一个状态(container),可以使用命令docker ps来查看正在运行的container,对于已经退出的container,则可以使用docker ps -a来查看。 如果你退出了一个container而忘记保存其中的数据,你可以使用docker ps -a来找到对应的运行过的container使用docker commit命令将其保存为image然后运行。

回到之前的问题,由于image被某个container引用(拿来运行),如果不将这个引用的container销毁(删除),那image肯定是不能被删除。

所以想要删除运行过的images必须首先删除它的container。继续来看刚才的例子,

docker@boot2docker:~$ docker ps -a
CONTAINER ID      IMAGE                COMMAND             CREATED             STATUS                   PORTS               NAMES
3e3f017a5df4      hello-world:latest   "/bin/bash"         2 weeks ago         Created                                    determined_newton
36fca46be557      hello-world          "/hello"            2 weeks ago         Exited (0) 2 weeks ago                     clever_bell

可以看出f1d956dc5945的image被3e3f017a5df4和36fca46be557的container使用着,所以必须首先删除该container

$docker rm 117843ade696
Error: container_delete: Impossible to remove a running container, please stop it first2014/03/22 16:36:44 Error: failed to remove one or more containers

这个时候删除镜像可能还会出现错误,比如:

Error: container_delete: Impossible to remove a running container, please stop it first2014/03/22 16:36:44 Error: failed to remove one or more containers

这是因为该container正在运行中(运行docker ps查看),先将其关闭

docker stop CONTAINER ID(具体的值)

然后再删除镜像,就会发现成功

docker@boot2docker:~$ docker rmif1d956dc5945
Untagged: hello-world:latest
Deleted: f1d956dc5945042a7aa18067346f1c2f1b47f39590a53f23e009600d5a9b3f49
Deleted: d59cd4c39e502ebb7eabe6b49eb0b5e19d38dede67540c51a27b5426c0976f4e
docker@boot2docker:~$ docker images
REPOSITORY          TAG               IMAGE ID            CREATED             VIRTUAL SIZE
php               latest            d71bada8846a      8 days ago          489.8 MB

可以看出,image已经被删除。


总结:删除镜像之前,要确保该镜像没有正在运行(可以通过命令:docker ps 来查看),以及运行过被保存记录全部删除(可以通过命令:docker ps -a )
页: [1]
查看完整版本: docker中删除镜像的描述