使用Docker卷或绑定挂载时可能发生的错误

本主题讨论使用Docker卷或绑定挂载时可能发生的错误。

错误:无法删除文件系统

一些基于容器的实用程序,例如[Google cAdvisor](https://github.com/google/cadvisor),挂载Docker系统目录,例如/var/lib/docker/到一个容器中。例如,cadvisor的文档指示您运行cadvisor容器,如下所示:

$ sudo docker run   --volume=/:/rootfs:ro   --volume=/var/run:/var/run:rw   --volume=/sys:/sys:ro   --volume=/var/lib/docker/:/var/lib/docker:ro   --publish=8080:8080   --detach=true   --name=cadvisor   google/cadvisor:latest

当您绑定挂载/var/lib/docker/时,这将有效地挂载所有其他正在运行的容器的资源到容器内的文件系统/var/lib/docker/。当您尝试删除这些容器中的任何一个时,删除尝试可能失败,并显示以下错误:

Error: Unable to remove filesystem for
74bef250361c7817bee19349c93139621b272bc8f654ae112dd4eb9652af9515:
remove /var/lib/docker/containers/74bef250361c7817bee19349c93139621b272bc8f654ae112dd4eb9652af9515/shm:
Device or resource busy

如果绑定挂载/var/lib/docker/的容器,在/var/lib/docker/中的文件系统上使用statfsfstatfs,并且没有关闭它们,则会出现问题。

通常,我们建议不要以这种方式绑定挂载/var/lib/docker。但是,cAdvisor需要此绑定挂载才能实现核心功能。

如果您不确定哪个进程,导致了错误中提到的路径 忙而阻止它被删除,您可以使用lsof命令 找到它的进程。例如,对于上面的错误,使用如下的命令:

``bash $ sudo lsof /var/lib/docker/containers/74bef250361c7817bee19349c93139621b272bc8f654ae112dd4eb9652af9515/shm


要解决此问题,请停止挂载到`/var/lib/docker`的容器,并再次尝试删除另一个容器。