当尝试删除一个Docker容器时(例如当尝试docker-compose down
时),我总是得到这些错误:
ERROR: for <my_container> container d8424f80ef124c2f3dd8f22a8fe8273f294e8e63954e7f318db93993458bac27: driver "overlay2" failed to remove root filesystem: unlinkat /var/lib/docker/overlay2/64311f2ee553a5d42291afa316db7aa392a29687ffa61971b4454a9be026b3c4/merged: device or resource busy
常见的建议,如重新启动docker服务,修剪或强制删除容器不工作。我发现唯一的工作是手动卸载与sudo umount /home/virtfs/xxxxx/var/lib/docker/overlay2/<container_id>/merged
,然后我能够删除容器。
我的操作系统是CentOS Linux release 7.9.2009 (Core)
,内核版本是3.10.0-1127.19.1.el7.x86_64
。我想这可能是由于overlay 2与CentOS冲突,但根据this page,我的CentOS/内核版本应该可以工作。如果能找到一个解决方案,那就太好了,因为我理想的情况是在docker-compose down
之前不需要使用提升的特权来卸载。
2条答案
按热度按时间7d7tgy0s1#
从错误日志中可以观察到涉及到文件装载。执行以下命令查看相关进程
第一个
停止占用的进程
然后删除容器
kxe2p93d2#
通常,当没有进程被列为阻塞时,就会发生这种情况,那么您就知道是内核模块阻塞了它。
最有可能的罪魁祸首是
nfs
(不知道为什么要在docker中运行它),或者是docker中绑定挂载的文件,有时是自动挂载的文件,比如由systemd-networkd创建的文件。Overlay 2被Ubuntu淘汰是有原因的。CentOS已经到了生命的尽头,所以这个问题可能已经在你最有可能的升级路径中解决了,到Rocky Linux。或者你可以进入迁移docker storage engine的丛林。
或者,如果可以的话,你也可以一开始就把这个软件包或者占据它的软件去掉,但是你必须分享更多关于它是什么的信息来帮助你。