Docker – 无法移除死容器

我无法删除死容器,我重新启动Docker服务后再次出现。

docker ps -a CONTAINER ID STATUS 11667ef16239 Dead 

然后

 docker rm -f 11667ef16239 

然后,当我运行docker ps -a时,没有显示Docker容器。

 docker ps -a CONTAINER ID STATUS 

但是,当我重新启动泊坞窗服务时:

 service docker restart 

再次运行docker ps -a:

 docker ps -a CONTAINER ID STATUS 11667ef16239 Dead 

当守护进程尝试清理容器时,最有可能发生错误,现在他陷入了这个“僵尸”状态。

我怕你唯一的select是手动清理它:

 $ sudo rm -rf /var/lib/docker/<storage_driver>/11667ef16239.../ 

其中<storage_driver>是驱动程序的名称( aufsoverlaybtrfsdevicemapper )。

事实上,为了摆脱这些死容器,你可能会尝试卸载这些被阻塞的文件系统来释放它们

所以,如果你得到这样的消息

 Error response from daemon: Cannot destroy container elated_wozniak: Driver devicemapper failed to remove root filesystem 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3: Device is Busy 

只要运行这个

 umount /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 

之后你可以正常移除容器

您也可以使用此命令删除dead容器

 docker rm $(docker ps --all -q -f status=dead) 

但是,我真的不确定为什么以及如何创builddead容器。 这个错误似乎相关https://github.com/typesafehub/mesos-spark-integration-tests/issues/34每当我得到;dead容器

[更新]使用Docker 1.13更新,我们可以轻松删除不需要的容器,悬挂图像

 $ docker system df #will show used space, similar to the unix tool df $ docker system prune # will remove all unused data. 

我得到了同样的问题,两个答案都没有帮助。

什么帮助我只是创build丢失的目录,他们删除它们:

 mkdir /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 mkdir /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3-init docker rm 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 

武力去除容器为我工作。

docker rm -f <id_of_the_dead_container>

备注

请注意,此命令可能会引发此错误Error response from daemon: Driver devicemapper failed to remove root filesystem <id_of_the_dead_container>: Device is Busy

尽pipe有这个消息,你的死容器设备映射器的挂载应该被删除。 也就是说,你将不再访问这个path:

/var/lib/docker/devicemapper/mnt/<id_of_the_dead_container>

删除死容器(CentOS 7上的docker 17.06.1-ce)时出现以下错误:

 Error response from daemon: driver "overlay" failed to remove root filesystem for <some-id>: remove /var/lib/docker/overlay/<some-id>/merged: device or resource busy 

这是我如何解决它:

1.检查哪些其他进程也在使用docker资源

$ grep docker /proc/*/mountinfo

其输出如下所示,其中/proc/之后的数字是pid

 /proc/10001/mountinfo:179... /proc/10002/mountinfo:149... /proc/12345/mountinfo:159 149 0:36 / /var/lib/docker/overlay/... 

2.检查上面的PID的进程名称

 $ ps -p 10001 -o comm= dockerd $ ps -p 10002 -o comm= docker-containe $ ps -p 12345 -o comm= nginx <<<-- This is suspicious!!! 

所以,与pid 12345的nginx似乎也使用/var/lib/docker/overlay/... ,这就是为什么我们无法删除相关的容器,并获得device or resource busy错误。 (关于如何将nginx与docker容器共享相同的挂载名称空间的讨论请参见这里 ,以防止它被删除。)

3.停止nginx ,然后我可以成功删除容器。

 $ sudo service nginx stop $ docker rm <container-id> 

尝试运行以下命令。 它总是为我工作。

 # docker volume rm $(docker volume ls -qf dangling=true) # docker rm $(docker ps -q -f 'status=exited') 

执行上述命令后,重启docker,

 # service docker restart 

在Centos7和Docker 1.8.2上运行时,我无法使用Zgr3doo的解决scheme通过devicemapper卸载(我认为我得到的响应是没有安装/find卷)。

我想我也有类似的事情发生在sk8terboi87ツ的答案:我相信这个消息是卷不能卸载,它列出了它试图卸下的具体卷,以删除死容器。

什么工作对我来说是先停泊docker工人,然后手动删除目录。 我能够通过前一个命令的错误输出来确定它们是哪一个来删除所有死容器。

对上面的模糊描述抱歉。 我在处理死容器后几天才发现这个问题。 但是,我今天注意到了一个类似的模式:

 $ sudo docker stop fervent_fermi; sudo docker rm fervent_fermi fervent_fermi Error response from daemon: Cannot destroy container fervent_fermi: Driver devicemapper failed to remove root filesystem a11bae452da3dd776354aae311da5be5ff70ac9ebf33d33b66a24c62c3ec7f35: Device is Busy Error: failed to remove containers: [fervent_fermi] $ sudo systemctl docker stop $ sudo rm -rf /var/lib/docker/devicemapper/mnt/a11bae452da3dd776354aae311da5be5ff70ac9ebf33d33b66a24c62c3ec7f35 $ 

我注意到,使用这种方法时,docker重新创build了不同名称的图像:

 a11bae452da3 trend_av_docker "bash" 2 weeks ago Dead compassionate_ardinghelli 

这可能是由于容器被重新启动=始终发出的,但是,容器ID与之前使用我强制删除的卷的容器的ID相匹配。 删除这个新容器没有任何困难:

 $ sudo docker rm -v compassionate_ardinghelli compassionate_ardinghelli