리그캣의 개발놀이터

[도커 에러] remove : device or resource busy 도커 rm 에러 본문

프로그래밍 기본/서버 구축 및 관리

[도커 에러] remove : device or resource busy 도커 rm 에러

리그캣 2019. 4. 8. 15:41

위와 같이 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} 

Comments