工作中使用docker-compose部署容器,有时候会出现使用
docker-compose stop或docker-compose down命令想停掉容器,但是依然无法停止或者一直卡顿在停止中的阶段,这种问题很让人头疼啊!
在使用docker部署服务时,偶尔会遇到docker服务假死的情况,使用的命令如下:
之前没有遇到过这种问题,也是第一次,于是就各种信息都看一下,各种可能性也都考虑到位
猜测这种情况,可能是由于容器内部的问题导致服务无法正常运行,或者Docker守护进程本身出现了问题。
docker logs CONTAINER_IDdocker logs -f CONTAINER_IDdocker statssudo systemctl status dockersudo systemctl restart dockerdocker stop CONTAINER_ID
docker start CONTAINER_IDdmesg | grep -i dockerdocker network lsdocker inspect CONTAINER_ID | grep NetworkModesudo systemctl restart dockersudo systemctl restart docker要注意,这个操作会把所有的docker服务无差别的重启,慎用
docker ps命令找到容器ID【CONTAINER_ID】docker stop 【CONTAINER_ID】 发现停不掉ll /var/lib/docker/containers | grep 【CONTAINER_ID】cd /var/lib/docker/containersrm -rf 目录名这里删除可能会报下面的错误,因为你的容器还挂载了其他目录,信息如下: rm:无法删除"/var/lib/docker/containers/目录名/secrets":设备或资源忙无法删除"/var/lib/docker/containers/目录名/shm": 设备或资源忙
这个时候查一下容器对应的挂载目录
cat /proc/mounts |grep "docker" |grep "【CONTAINER_ID】"然后先取消挂载
umount /data/sys/var/docker/containers/挂载目录/secretsumount /data/sys/var/docker/containers/挂载目录/shm如果这一步 unmout 不了,可以尝试找到使用该目录的进程
lsof |grep "挂载目录"如果有相关进程,记录相关的进程号直接 kill -9 进程号
ll /var/lib/docker/containers | grep 【CONTAINER_ID】这个时候再重新执行删除目录命令
cd /var/lib/docker/containersrm -rf 目录名这个时候就可以删掉了
docker stop 【CONTAINER_ID】或
docker rm -f 【CONTAINER_ID】或docker kill --signal=SIGINT 【CONTAINER_ID】如果还是无法停掉改服务,可以按如下步骤:
使用linux进程管理命令来结束容器进程
ps -ef | grep【CONTAINER_ID】
kill -9 PID
docker ps先可以看到该服务已经被干掉了。
如果说按照这个操作依然无法解决docker假死问题,那么我还是建议大家采用上面最粗暴的方式去解决,但是要注意,这个操作会把所有的docker服务无差别的重启。