我无法删除死容器,它在重新启动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
嗨,这仍然是当前的问题,但目前接受的答案不再有效,而且相当危险。 这是一个很好的答案,所以如果可能的话你会接受那个答案,这是公平的
实际上这些日子发生了轻微变化,以便摆脱那些可能会尝试卸载那些被阻止的文件系统以释放它们的死容器
所以,如果你收到这样的消息
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
你可以在那之后正常删除容器
这个感觉就像最好,最安全的!
我只是重新启动了系统并且我已经重新登录..容器已经消失了。
这对我有用,虽然我不得不重新启动docker服务以使docker ps -a的输出实际为空。
两年后,这篇文章仍然具有现实意义。花了两个小时试图找到一个解决方案然后遇到了这个:github.com/moby/moby/issues/3786#issuecomment-33471966。要卸载所有devicemapper容器,请使用umount $(grep devicemapper procmounts | awk {print$2} | sort -r)
最有可能的是,当守护进程试图清理容器时发生错误,他现在陷入了这种"僵尸"状态。
我担心你唯一的选择是手动清理它:
$ sudo rm -rf /var/lib/docker//11667ef16239.../
其中是驱动程序的名称(aufs,overlay,btrfs或devicemapper)。
通过发出一个docker命令而不是诉诸于sudo rm ...对于像我这样在我们的产品盒上没有sudo权限的人来说,这个功能可以实现这个功能。
您也可以使用此命令删除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.
您可能需要添加--force param才能正常工作
@Akvel它没有它们。它已经死了,所以没有依赖的过程。
docker system prune的表现超出预期,但解决了这个问题。如OP中所述,docker rm --force不起作用。
正如@rdupz所暗示的,docker system prune是危险的,请参阅此评论,了解如何使用-a删除甚至命名的卷。它还会删除网络,这通常不是您想要的。最好在1.13+中使用docker image prune和docker volume prune。
此命令提供语法错误。我认为你错放了力量-f param
删除死容器(CentOS 7上的docker 17.06.1-ce)时出现以下错误:
Error response from daemon: driver"overlay" failed to remove root filesystem for :
remove /var/lib/docker/overlay//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 <<
所以,带有pid 12345的nginx似乎也在使用/var/lib/docker/overlay/...,这就是我们无法删除相关容器并获得device or resource busy错误的原因。 (有关nginx如何与docker容器共享相同的mount命名空间,请参见此处,以防止删除它。)
3.停止nginx然后我可以成功删除容器。
$ sudo service nginx stop
$ docker rm
谢谢你先生的nginx信息,我有同样的问题,它生气了我很多次,我也遇到了与DNS进程相同的问题(命名),不得不:systemctl restart命名
我得到了同样的问题,两个答案都没有帮助。
对我有帮助的只是创建缺少的目录并删除它们:
mkdir /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3
mkdir /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3-init
docker rm 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3
强行拆除容器为我工作。
docker rm -f
笔记:
请注意,此命令可能会抛出此错误
Error response from daemon: Driver devicemapper failed to remove root filesystem : Device is Busy
尽管有此消息,仍应删除您的死容器设备映射器的安装。也就是说,您将不再访问此路径:
/var/lib/docker/devicemapper/mnt/
grep 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 /proc/*/mountinfo
然后找到656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3and的pid并杀死它
其中proc之后的数字是pid
我已经尝试了上面的建议,但没有奏效。
然后
我试试:docker system prune -a,它第一次没用
我重新启动系统
我再试一次docker system prune -a。这次它有效。它会发出一条警告信息,最后问"你确定要继续吗?是吗?答案。答案:是的。时间到最后,死人的容器都消失了。
使用docker ps -a进行验证
重要 - 这是核选项,因为它会破坏所有容器+图像
这对我有用。谢谢!我还必须重新启动系统。
尝试运行以下命令。它总是适合我。
# docker volume rm $(docker volume ls -qf dangling=true)
# docker rm $(docker ps -q -f 'status=exited')
执行上述命令后,重启docker by,
# service docker restart
尝试了以上所有(重启/重启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守护进程并修复了这个问题!
对于Windows:
del D:\ProgramData\docker\containers\{CONTAINER ID}
del D:\ProgramData\docker\windowsfilter\{CONTAINER ID}
然后重启Docker Desktop
这里有很多答案,但没有一个涉及对我有用的(快速)解决方案。
我正在使用Docker版本1.12.3,构建6b644ec。
我只是运行了docker rmi来从死容器来的图像。然后docker ps -a显示死容器完全丢失。
然后,当然,我只是重新拉动图像并再次运行容器。
我不知道它是如何在这种状态下发现的,但它是......
试试,它对我有用:
$ 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
试试这个对我有用:
docker rm -f
eg. docker rm -f 11667ef16239
尝试杀死它,然后删除> :)即
docker kill $(docker ps -q)
尝试这个它在centos上为我工作
1)docker container ls -a
为您提供一个容器列表,检查您要删除的状态
2)docker container rm -f 97af2da41b2b
不是一个大粉丝力旗,但做的工作
检查它是否工作只需再次激活命令或列出它。
3)继续,直到我们清除所有死容器
在Centos7和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
备选方案2:将其重新编写为独立的答案。这样做可以参考其他答案 - 但要具体说明你在谈论哪个答案,例如:按作者姓名。从"我还不能评论......"开始,几乎可以保证你的帖子被删除。如果您有一些有用的东西可以作为答案添加 - 只需这样做! (并且到那里再获得9个代表!)祝你好运。
用于删除所有死容器
<5233>
删除所有已退出的容器docker rm -f $(docker ps --all -q -f status=exited)
因为我有-f是必要的