解决存储错误

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

错误:无法删除文件系统

一些基于容器的实用程序(例如 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/ 如果绑定安装使用的容器statfsfstatfs文件系统上的容器在其中处理/var/lib/docker/ 并且未关闭它们,则会出现问题。

/var/lib/docker通常,我们建议不要以这种方式绑定安装。然而,cAdvisor核心功能需要这种绑定安装。

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

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

要解决此问题,请停止绑定安装的容器 /var/lib/docker,然后再次尝试删除其他容器。