[도커 에러] remove : device or resource busy 도커 rm 에러
위와 같이 Dead라고 되어 있는 docker를 rm으로 제거하려고 하였을때 아래와 같은 명령어가 발생하였다.
Error response from daemon: Driver devicemapper failed to remove root filesystem 09edaa080fa6ae5ab5489e43511c2f02ba869ad985bdcc0b4d8eb108a7353869: remove /var/lib/docker/devicemapper/mnt/14b8d05b91cacb5e800c5f9923f81ba7fee2d850718fc40b52cad810d2f8a69b: device or resource busy
이유는 간단하다 해당 도커와 관련된 프로세스가 구동중이기 때문
이럴 경우에는 아래의 shell script로 해당 프로세스를 찾아 kill 시켜주면 된다.
$vi find.sh
#!/bin/bash
# A simple script to get information about mount points and pids and their
# mount namespaces.
if [ $# -ne 1 ];then
echo "Usage: $0 "
exit 1
fi
ID=$1
MOUNTS=`find /proc/*/mounts | xargs grep $ID 2>/dev/null`
[ -z "$MOUNTS" ] && echo "No pids found" && exit 0
printf "PID\tNAME\t\tMNTNS\n"
echo "$MOUNTS" | while read LINE; do
PID=`echo $LINE | cut -d ":" -f1 | cut -d "/" -f3`
# Ignore self and thread-self
if [ "$PID" == "self" ] || [ "$PID" == "thread-self" ]; then
continue
fi
NAME=`ps -q $PID -o comm=`
MNTNS=`readlink /proc/$PID/ns/mnt`
printf "%s\t%s\t\t%s\n" "$PID" "$NAME" "$MNTNS"
done
이때 실행 권한을 주어야 한다.
$chmod +x find.sh
바꾼 후 다음과 같이 실행
$./find.sh {docker container full id}
container full id는 다음의 명령어로 검색 가능
$docker inspect {dockerId} | grep Id
아래와 같이 사용 프로세스가 나오면 종료시켜주면 된다.
$kill 27362
그 후
$docker rm {dockershortId}