docker 重新部署服务时报错 device or resource busy 的解决

最近遇到一个问题, 当我在docker里重新部署某个服务的时候,执行完sh start.sh 命令或者docker-compose up -d命令后服务启动不成功,还报了个device or resource busy的错。

然后我docker ps一看,好家伙,不仅启动不成功,服务还没了。
这是因为docker 部署的时候会将原本的东西全部 rm一遍然后才又重新构建。

看一下当时报错内容:


failed to remove root filesystem for 9b13c255d03757c456651506ada5566a5b5e5a87b851e3621dcejf823: remove /var/lib/docker/overlay/9b13c255d03757c456651506adaa2fb660f75a5b5e5a87b851e3621dce0a368d/merged: device or resource busy

主要看,是报了:device or resource busy, 这意思是说设备或资源繁忙,你没法删除这个资源啊。

然后我去到了/var/lib/docker/overlay/9b13c255d03757c456651506adaa2fb660f75a5b5e5a87b851e3621dce0a368d/merged 这目录下一看,是空的,手动删除也不行。

解决办法

1. 查找占用此目录的进程

命令:grep id /proc/*/mounts
示例如下:
grep 9b13c255d03757c456651506adaa2fb660f75a5b5e5a87b851e3621dce0a368d /proc/*/mounts

​执行命令后很明显看到有两个进程正在使用它:


/proc/25086/mounts:overlay /data0/docker/overlay2/9b13c255d03757c456651506adaa2fb660f75a5b5e5a87b851e3621dce0a368d /merged overlayrw,relatime,lowerdir=/data0/docker/overlay2/l/F4BQHNVPHGRKWXFRUIHXUMAHZ2:/data0/docker/overlay2/l/.....
/proc/25065/mounts:overlay /data0/docker/overlay2/9b13c255d03757c456651506adaa2fb660f75a5b5e5a87b851e3621dce0a368d /merged overlayrw,relatime,lowerdir=/data0/docker/overlay2/l/......

2. 杀死进程

命令:kill -9 进程id
示例如下:
kill -9 25086
kill -9 25065

注意:有些进程能不能直接进行删除要看清楚,一股脑删除了万一影响到别的服务就不好了。

3. 继续操作删除目录,成功

命令: rm -rf 报错的文件路径
示例:
rm -rf /var/lib/docker/overlay/9b13c255d03757c456651506adaa2fb660f75a5b5e5a87b851e3621dce0a368d/merged

删除这个目录文件后再重新执行 sh start.sh 或者 docker-compose up -d 命令启动服务, 则启动成功了!

你可能感兴趣的:(docker,容器)