当执行 docker rm
有可能遇到 device or resource busy 无法删除容器的情况。
这是 docker 的老毛病,真实原因未探明,网上的文章看起来都不像是彻底明白问题所在,总之解决方法如下:
通常是因为这个文件被除了容器进程的其他进程 mount 了,导致容器无法释放。
例如执行 docker rm
时报错:
Error response from daemon: driver "overlay" failed to remove root filesystem for 34d2340b73edd5466a675918c0f0d4567a68970d24065b45288c46926f4c8815: remove /var/lib/docker/overlay/edcb91e85162c7867a9816af6d24ca168c0506989069b728931b9586a578ff2e/merged: device or resource busy
拷贝这个 overlay 前部分路径比如 edcb91
,
grep -R "edcb91" /proc/*/mountinfo
就能看到占用这个路径的进程号是什么,比如 /proc/8442/mountinfo
,
那么就用 ps -ef | grep 8442
或者 lsof -p 8442
来看该进程具体是什么。
关闭那个进程后,应该就可以 docker rm
容器了。
这个方法不能解决问题的话,重启机器一定可以解决问题。
官方 Contributor 说已在 17.12.1 版本中修复,可以尝试升级来解决该问题。