Docker 驱动程序“overlay2”无法删除根文件系统:unlinkat - 设备或资源繁忙

问题描述 投票:0回答:2

当尝试删除 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
。我认为这可能是由于 overlay2 与 CentOS 冲突,但根据 this page 我的 CentOS/内核版本应该可以工作。找到解决方案会很棒,因为我理想情况下希望
docker-compose down
而不必事先使用提升的权限来卸载。

docker centos docker-container
2个回答
0
投票

从错误日志中观察到涉及到文件挂载 执行以下命令查看相关进程

grep 64311f2ee553a5d42291afa316db7aa392a29687ffa61971b4454a9be026b3c4 /proc/*/mountinfo
ps -ef | grep "The process ID obtained by the grep command above" 

停止被占用的进程

然后删除容器


0
投票

当没有进程被列为阻塞时,通常会发生这种情况,那么您就知道这是内核模块阻塞了它。

最有可能的罪魁祸首是

nfs
(不知道为什么你会在docker中运行它),或者是docker内绑定安装的文件,有时是自动文件,比如可能是由systemd-networkd创建的文件。

Overlay2 被 Ubuntu 淘汰是有原因的。 CentOS 已结束生命周期,因此这个问题可能已经在您最有可能的升级路径(升级到 Rocky Linux)中得到解决。或者,您可以进入迁移 docker 存储引擎的丛林。

或者,如果可以的话,您可以首先删除占用它的软件包或软件。但您必须分享更多有关这方面的信息才能获得帮助。

© www.soinside.com 2019 - 2024. All rights reserved.