docker异常退出导致重容器报错-device-or-resource-busy

今天在公司构建镜像时,docker服务异常退出,重启docker服务后再重启容器失败,提示内容如下

Error response from daemon: Cannot start container 012a65asj4562a5:
Error getting container: 012a65asj4562a5648268327f8f7c6fffaf2f19cda5cf1d97fdc70
from driver devicemapper:
Error mounting
'/var/lib/docker/devicemapper/mnt/012a65asj4562a5648268327f8f7c6fffaf2f19cda5ca25sd2'
device or resource busy
Error: failed to start containers: [012a65asj4562a5]

原因

在容器异常停止时,这个设备还被这个容器挂载着,所以在重启容器时会失败,这算是docker一个常见的bug,笔者的docker版本1.7.1,不知道新版本有没有修复这个bug

解决方案

先用如下命令找出没有umount的文件
cat /proc/mounts | grep “mapper/docker” | awk ‘{print $2}’

然后依次使用 umount 命令解除挂载
例如 umount /var/lib/docker/devicemapper/mnt/012a65asj4562a5648268327f8f7c6fffaf2f19cda5ca25sd2