Docker - 无法移除死容器

时间:2015-06-12 01:43:34

标签: docker

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

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead

然后

docker rm -f 11667ef16239

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

docker ps -a
CONTAINER ID         STATUS

但是,当我重新启动docker服务时:

service docker restart

再次运行docker ps -a:

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead

22 个答案:

答案 0 :(得分:43)

实际上,为了摆脱那些可能会尝试卸载那些被阻止的文件系统以释放它们的死容器,事情发生了轻微变化

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

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

你可以在那之后删除容器

答案 1 :(得分:36)

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

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

但是,我真的不确定为什么&如何创建dead容器。每当我获得dead个容器

时,此错误似乎与https://github.com/typesafehub/mesos-spark-integration-tests/issues/34相关

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

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

答案 2 :(得分:35)

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

我担心你唯一的选择是手动清理它:

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

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

答案 3 :(得分:20)

删除死容器(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。检查哪些其他进程也在使用泊坞窗资源

$ 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容器共享相同的mount命名空间从而阻止删除它的讨论,请参阅here。)

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

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

答案 4 :(得分:8)

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

对我有帮助的只是创建缺少的目录并将其删除:

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

答案 5 :(得分:8)

强行拆除容器为我工作。

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

尽管有此消息,仍应移除您的死容器设备映射器的装载。也就是说,您将不再访问此路径:

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

答案 6 :(得分:5)

grep 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 /proc/*/mountinfo

然后找到656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3and的pid并将其杀死

答案 7 :(得分:5)

我已尝试过上述建议,但没有奏效。

然后

  1. 我尝试:docker system prune -a,它第一次无效
  2. 我重启系统
  3. 我再试一次docker system prune -a。这次它有效。它会发出一条警告信息,最后询问“你确定要继续吗?是吗?答案。答案:是的。时间到最后,死人的容器都不见了。
  4. 使用docker ps -a
  5. 进行验证

    重要 - 这是核选项,因为它会破坏所有容器+图像

答案 8 :(得分:4)

尝试运行以下命令。它总是适合我。

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

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

# service docker restart

答案 9 :(得分:3)

尝试了以上所有方法(短于重启/重启docker)。

这是docker rm的错误:

$ docker rm 08d51aad0e74
Error response from daemon: driver "devicemapper" failed to remove root filesystem for 08d51aad0e74060f54bba36268386fe991eff74570e7ee29b7c4d74047d809aa: remove /var/lib/docker/devicemapper/mnt/670cdbd30a3627ae4801044d32a423284b540c5057002dd010186c69b6cc7eea: device or resource busy

然后我执行了以下操作:

$  grep docker /proc/*/mountinfo | grep 958722d105f8586978361409c9d70aff17c0af3a1970cb3c2fb7908fe5a310ac
/proc/20416/mountinfo:629 574 253:15 / /var/lib/docker/devicemapper/mnt/958722d105f8586978361409c9d70aff17c0af3a1970cb3c2fb7908fe5a310ac rw,relatime shared:288 - xfs /dev/mapper/docker-253:5-786536-958722d105f8586978361409c9d70aff17c0af3a1970cb3c2fb7908fe5a310ac rw,nouuid,attr2,inode64,logbsize=64k,sunit=128,swidth=128,noquota

这是令人讨厌的进程的PID,使它保持忙碌状态-20416(/ proc /

之后的项目

所以我做了一个ps -p,令我惊讶的是:

[devops@dp01app5030 SeGrid]$ ps -p 20416
  PID TTY          TIME CMD
20416 ?        00:00:19 ntpd

真实的WTF时刻。因此,我将问题与Google配对解决,发现了这一点:  然后找到这个https://github.com/docker/for-linux/issues/124

结果是我不得不重新启动ntp守护程序,从而解决了该问题!!!

答案 10 :(得分:2)

对于Windows:

del D:\ProgramData\docker\containers\{CONTAINER ID}
del D:\ProgramData\docker\windowsfilter\{CONTAINER ID}

然后重新启动 Docker Desktop

答案 11 :(得分:0)

尝试杀死它,然后删除&gt; :)即 docker kill $(docker ps -q)

答案 12 :(得分:0)

在Centos7&amp;上运行Docker 1.8.2,我无法使用Zgr3doo的解决方案来卸载devicemapper(我认为我得到的响应是没有挂载/找到卷。)

我认为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重新创建了具有不同名称的图像:

a11bae452da3     trend_av_docker   "bash"   2 weeks ago    Dead    compassionate_ardinghelli

这可能是由于容器发出了restart = always,但容器ID与先前使用我强制删除的卷的容器的ID相匹配。删除这个新容器没有任何困难:

$ sudo docker rm -v compassionate_ardinghelli
compassionate_ardinghelli

答案 13 :(得分:0)

尝试一下,它在centos上对我有用 1)docker容器ls -a 为您提供要摆脱的容器检查状态列表 enter image description here 2)docker容器rm -f 97af2da41b2b 不是很大的粉丝力量标志,但可以完成工作 要检查它是否工作,只需再次启动该命令或将其列出即可。 enter image description here 3)继续直到我们清除所有死容器 enter image description here

答案 14 :(得分:0)

这里有很多答案,但是都没有涉及对我有用的(快速)解决方案。

我正在使用Docker版本1.12.3,内部版本6b644ec。

我只是运行docker rmi <image-name>来获取死容器来自哪里的图像。然后docker ps -a表示死容器完全丢失。

然后,当然,我只是重新拉起图像,然后再次运行容器。

我不知道它是如何处于这种状态的,但事实是……

答案 15 :(得分:0)

尝试,它对我有用:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4f13b53be9dd        5b0bbf1173ea        "/opt/app/netjet..."   5 months ago        Dead                                    appname_chess

$ docker rm $(docker ps --all -q -f status=dead)
Error response from daemon: driver "devicemapper" failed to remove root filesystem for 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440: failed to remove device 487b4b73c58d19ef79201cf6d5fcd6b7316e612e99c14505a6bf24399cad9795-init: devicemapper: Error running DeleteDevice dm_task_run failed

su
cd /var/lib/docker/containers
[root@localhost containers]#  ls -l
total 0
drwx------. 1 root root 312 Nov 17 08:58 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
[root@localhost containers]# rm -rf 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
systemctl restart docker

答案 16 :(得分:0)

尝试一下对我有用的

docker rm -f <container_name>

eg. docker rm -f 11667ef16239

答案 17 :(得分:0)

  1. 用于删除所有失效的容器 docker rm -f $(docker ps --all -q -f status=dead)

  2. 用于删除所有退出的容器docker rm -f $(docker ps --all -q -f status=exited)

因为我有-f是必需的

答案 18 :(得分:0)

摆脱死掉的容器进程的最好方法是重新启动docker服务。 我无法删除容器,因为它处于重新启动状态,我只是重新启动了docker服务,它对我有用。

答案 19 :(得分:0)

就我而言,我必须使用

将其删除
rm -r /var/lib/docker/containers/<container-id>/

成功了。也许这就是您在Docker版本〜19中解决它的方法。我的docker版本是19.03.12

答案 20 :(得分:0)

我在 Windows 右下角重新启动了 Docker 代理,docker iCon,重新启动 Docker。然后我运行 docker ps -a 并看到容器仍然坐在那里。 然后我运行 docker rm -f container id 并且这对我有用。

答案 21 :(得分:0)

如果您是 Mac/Windows 用户并拥有 Docker 桌面,则只需重新启动 Docker 桌面即可,在 UI 中您可以简单地删除容器,而不会出现任何复杂情况。