Docker-죽은 컨테이너를 제거 할 수 없음


81

죽은 컨테이너를 제거 할 수 없습니다. Docker 서비스를 다시 시작한 후에 다시 나타납니다.

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead

그때

docker rm -f 11667ef16239

그런 다음 docker ps -a를 실행하면 docker 컨테이너가 표시되지 않습니다.

docker ps -a
CONTAINER ID         STATUS

그러나 Docker 서비스를 다시 시작할 때 :

service docker restart

그리고 docker ps -a를 다시 실행하십시오.

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead

3
안녕하세요, 이것은 여전히 ​​현재 문제이지만 현재 받아 들여지는 답변은 더 이상 유효하지 않으며 매우 위험합니다. umount 대답이 있습니다. 좋은 대답입니다. 가능하다면 그 대답을 받아 들인다면 공정 할 것입니다
Daniel F

umount자원이 사용중인 경우가 마운트 해제를 허용하지 않기 때문에 대답은 더 이상 실행 가능하지 않다. 마찬가지로 책임있는 pid를 죽이는 것도 효과가 없습니다.
Nutle 2010 년

답변:


48

대부분의 경우 데몬이 컨테이너 정리를 시도 할 때 오류가 발생하여 이제이 "좀비"상태에 갇혀 있습니다.

여기에서 유일한 옵션은 수동으로 정리하는 것입니다.

$ sudo rm -rf /var/lib/docker/<storage_driver>/11667ef16239.../

어디 <storage_driver>드라이버의 이름입니다 ( aufs, overlay, btrfs, 또는 devicemapper).


이 작업에 동등한 기능은 우리의 자극 상자에 sudo는 권한이없는 사람 나 같은 사람들을 위해 ... 고정 표시기 명령을 실행하는 대신 sudo는 RM에 의지에 의해 가능하다
스콧 Stensland을

45

실제로는 죽은 컨테이너를 제거하기 위해 요즘 약간 변경되었습니다. 차단 된 파일 시스템을 마운트 해제하여 해제 할 수 있습니다.

그래서 이런 메시지를 받으면

Error response from daemon: Cannot destroy container elated_wozniak: Driver devicemapper failed to remove root filesystem 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3: Device is Busy

그냥 실행

umount /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3

일반적으로 그 후에 용기를 제거 할 수 있습니다.


이것은 최고, 가장 안전한 것 같습니다!
Daniel F

방금 시스템을 재부팅하고 다시 로그인했습니다. 사라진 컨테이너.
슈퍼 히어로

출력이 docker ps -a실제로 비어 있도록 도커 서비스를 다시 시작해야했지만 이것은 나를 위해 일했습니다 .
Daniel Quinn

1
2 년 후에도이 게시물은 여전히 ​​관련이 있습니다. 해결책을 찾기 위해 두 시간을 보냈는데 github.com/moby/moby/issues/3786#issuecomment-33471966 . 모든 devicemapper 컨테이너를 마운트 해제하려면umount $(grep 'devicemapper' /proc/mounts | awk '{print$2}' | sort -r)
AlexanderF

43

dead이 명령으로 컨테이너를 제거 할 수도 있습니다.

docker rm $(docker ps --all -q -f status=dead)

그러나 dead컨테이너가 왜 어떻게 생성 되는지 잘 모르겠습니다 . 이 오류는 컨테이너를 얻을 때마다 https://github.com/typesafehub/mesos-spark-integration-tests/issues/34 와 관련된 것으로 보입니다.dead

[업데이트] Docker 1.13 업데이트로 원치 않는 컨테이너, 매달린 이미지를 쉽게 제거 할 수 있습니다.

$ docker system df #will show used space, similar to the unix tool df
$ docker system prune # will remove all unused data.

@Akvel 그것은 그들없이 작동합니다. 이미 죽었으므로 종속 프로세스가 없습니다.
sk8terboi87 ツ

5
docker system prune예상보다 더 많이했지만 문제를 해결했습니다. OP에 명시된대로 docker rm --force작동하지 않습니다.
rdupz

1
@rdupz에 의해 암시 된 것처럼 docker system prune 위험 합니다 .를 사용할 때 명명 된 볼륨도 제거하는 방법에 대한 이 주석을 참조하십시오 -a. 또한 일반적으로 원하는 것이 아닌 네트워크를 제거합니다. 1.13 docker image prune이상 docker volume prune에서 사용하는 것이 더 좋습니다.
RichVel

이 명령은 구문 오류를 제공합니다. 난 당신이 강제로 잘못 생각 -fPARAM
VPaul

28

죽은 컨테이너를 제거 할 때 다음 오류가 발생했습니다 (CentOS 7의 docker 17.06.1-ce).

Error response from daemon: driver "overlay" failed to remove root filesystem for <some-id>: 
remove /var/lib/docker/overlay/<some-id>/merged: device or resource busy

수정 방법은 다음과 같습니다.

1. 도커 리소스를 사용하는 다른 프로세스도 확인

$ grep docker /proc/*/mountinfo

다음과 같은 결과를 출력 /proc/합니다 pid.

/proc/10001/mountinfo:179...
/proc/10002/mountinfo:149...
/proc/12345/mountinfo:159 149 0:36 / /var/lib/docker/overlay/...

2. 위 pid의 프로세스 이름을 확인하십시오.

$ ps -p 10001 -o comm=
dockerd
$ ps -p 10002 -o comm=
docker-containe
$ ps -p 12345 -o comm=
nginx   <<<-- This is suspicious!!!

따라서 nginxpid 12345는를 사용하는 것처럼 보이 /var/lib/docker/overlay/...므로 관련 컨테이너를 제거하고 device or resource busy오류를 얻을 수 없습니다 . ( 도커 컨테이너와 동일한 마운트 네임 스페이스를 공유하여 삭제를 방지 하는 방법에 대한 논의는 여기 를 참조 하십시오nginx .)

3. 중지 nginx하면 컨테이너를 성공적으로 제거 할 수 있습니다.

$ sudo service nginx stop
$ docker rm <container-id>

1
nginx 정보를 주셔서 감사합니다. 동일한 문제가 발생했습니다. 여러 번 저를 화나게했습니다. 또한 DNS 프로세스 (이름이 지정됨)에서도 동일한 문제가 발생했습니다. systemctl restart named
user1928596

13

나는 같은 문제가 있었고 두 답변 모두 도움이되지 않았습니다.

나를 위해 도움이 된 것은 누락 된 디렉토리를 만들고 제거하는 것입니다.

mkdir /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3
mkdir /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3-init
docker rm 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3

11

강제로 컨테이너를 제거하는 것이 효과적이었습니다.

docker rm -f <id_of_the_dead_container>

참고 :

이 명령으로 인해이 오류가 발생할 수 있습니다. Error response from daemon: Driver devicemapper failed to remove root filesystem <id_of_the_dead_container>: Device is Busy

이 메시지에도 불구하고 죽은 컨테이너 장치 매퍼의 마운트를 제거해야합니다. 즉, 더 이상이 경로에 액세스 할 수 없습니다.

/var/lib/docker/devicemapper/mnt/<id_of_the_dead_container>


8

위의 모든 것을 시도했습니다 (재부팅 / 도커 다시 시작 부족).

그래서 여기에 오류 om docker rm이 있습니다.

$ docker rm 08d51aad0e74
Error response from daemon: driver "devicemapper" failed to remove root filesystem for 08d51aad0e74060f54bba36268386fe991eff74570e7ee29b7c4d74047d809aa: remove /var/lib/docker/devicemapper/mnt/670cdbd30a3627ae4801044d32a423284b540c5057002dd010186c69b6cc7eea: device or resource busy

그런 다음 다음을 수행했습니다.

$  grep docker /proc/*/mountinfo | grep 958722d105f8586978361409c9d70aff17c0af3a1970cb3c2fb7908fe5a310ac
/proc/20416/mountinfo:629 574 253:15 / /var/lib/docker/devicemapper/mnt/958722d105f8586978361409c9d70aff17c0af3a1970cb3c2fb7908fe5a310ac rw,relatime shared:288 - xfs /dev/mapper/docker-253:5-786536-958722d105f8586978361409c9d70aff17c0af3a1970cb3c2fb7908fe5a310ac rw,nouuid,attr2,inode64,logbsize=64k,sunit=128,swidth=128,noquota

이것은 바쁘게 유지하는 문제가되는 프로세스의 PID입니다-20416 (/ proc /

그래서 나는 ps -p를했고 놀랍게도 다음을 발견했습니다.

[devops@dp01app5030 SeGrid]$ ps -p 20416
  PID TTY          TIME CMD
20416 ?        00:00:19 ntpd

진정한 WTF 순간. 그래서 나는 문제를 Google로 해결하고 이것을 발견했습니다 : 그런 다음 https://github.com/docker/for-linux/issues/124를 찾았습니다.

ntp 데몬을 다시 시작해야했고 문제가 해결되었습니다 !!!


당신은 내 하루를 구했습니다. 나는 문제로 고생했다. 도커 데몬을 다시 시작한 후에도 문제가 해결되지 않았습니다. 나는이 대답을 받아 들여야한다고 믿는다. 감사.
토요일

6

다음 명령을 실행 해보십시오. 그것은 항상 나를 위해 작동합니다.

# docker volume rm $(docker volume ls -qf dangling=true)
# docker rm $(docker ps -q -f 'status=exited')

위의 명령을 실행 한 후 docker를 다시 시작하십시오.

# service docker restart

6
grep 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 /proc/*/mountinfo

그런 다음 PID를 찾아 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3and죽여


여기서 숫자 후 /proc/PID는 것입니다
Belter

6

위의 제안을 시도했지만 작동하지 않았습니다.

그때

  1. 나는 시도 : docker system prune -a, 처음에는 작동하지 않았습니다.
  2. 시스템을 재부팅합니다
  3. 다시 시도합니다 docker system prune -a. 이번에는 작동합니다. 경고 메시지를 보내고 결국 "계속 하시겠습니까? y / n?. Ans : y. 시간이 지나면 결국 죽은 컨테이너가 사라집니다.
  4. 확인 docker ps -a

중요 -이것은 모든 컨테이너 + 이미지를 파괴하므로 핵 옵션입니다.


이것은 나를 위해 일했습니다. 감사합니다! 시스템을 재부팅해야했습니다.
pandasCat

2

나를 위해 일한 이것을 시도하십시오.

docker rm -f <container_name>

eg. docker rm -f 11667ef16239

2

Windows의 경우 :

del D:\ProgramData\docker\containers\{CONTAINER ID}
del D:\ProgramData\docker\windowsfilter\{CONTAINER ID}

그런 다음 Docker Desktop을 다시 시작하십시오.


1

그것을 죽이고 제거> :) ie
docker kill $(docker ps -q)


1

여기에는 많은 답변이 있지만 그중 어느 것도 나를 위해 일한 (빠른) 솔루션과 관련이 없습니다.

Docker 버전 1.12.3, 빌드 6b644ec를 사용하고 있습니다.

나는 docker rmi <image-name>죽은 용기가 온 곳에서 이미지를 찾기 위해 달렸다 . ㅏdocker ps -a 는 죽은 용기가 완전히 사라진 것을 보여주었습니다.

그런 다음 물론 이미지를 다시 당기고 컨테이너를 다시 실행했습니다.

이 상태에서 어떻게 발견되었는지는 모르겠지만 ..


1

시도해보십시오.

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4f13b53be9dd        5b0bbf1173ea        "/opt/app/netjet..."   5 months ago        Dead                                    appname_chess

$ docker rm $(docker ps --all -q -f status=dead)
Error response from daemon: driver "devicemapper" failed to remove root filesystem for 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440: failed to remove device 487b4b73c58d19ef79201cf6d5fcd6b7316e612e99c14505a6bf24399cad9795-init: devicemapper: Error running DeleteDevice dm_task_run failed

su
cd /var/lib/docker/containers
[root@localhost containers]#  ls -l
total 0
drwx------. 1 root root 312 Nov 17 08:58 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
[root@localhost containers]# rm -rf 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
systemctl restart docker

1
  1. 죽은 컨테이너를 모두 삭제하려면 docker rm -f $(docker ps --all -q -f status=dead)

  2. 종료 된 모든 컨테이너를 삭제하려면 docker rm -f $(docker ps --all -q -f status=exited)

가지고 -f있으므로 필요합니다


오류 : 해당 컨테이너 없음 : 2787a08aaf3c 작동하지 않음, 표시 : 오류 : 해당 컨테이너 없음 : 2f13ced716af 오류 : 해당 컨테이너 없음 : 48d43ea0e93f 오류 : 해당 컨테이너 없음 : ab7720dd4392 오류 : 해당 컨테이너 없음 : c81751444fad
juliangonzalez

0

Centos7 & Docker 1.8.2에서 실행 중, Zgr3doo의 ​​솔루션을 사용하여 devicemapper로 마운트 해제 할 수 없었습니다 (내가받은 응답은 볼륨이 마운트 / 발견되지 않았다는 것입니다.)

나는 sk8terboi87 ツ의 대답에서도 비슷한 일이 일어났다 고 생각합니다. 볼륨을 마운트 해제 할 수 없다는 메시지가 있고 죽은 컨테이너를 삭제하기 위해 마운트 해제하려고 한 특정 볼륨이 나열되어 있다고 생각합니다.

나를 위해 일한 것은 먼저 docker를 중지 한 다음 디렉토리를 수동으로 삭제하는 것입니다. 죽은 컨테이너를 모두 삭제하라는 이전 명령의 오류 출력을 통해 어떤 것인지 확인할 수있었습니다.

위의 모호한 설명에 대해 사과드립니다. 죽은 컨테이너를 처리 한 지 며칠 후에이 질문을 찾았습니다. ..하지만 오늘도 비슷한 패턴을 발견했습니다.

$ sudo docker stop fervent_fermi; sudo docker rm fervent_fermi fervent_fermi
Error response from daemon: Cannot destroy container fervent_fermi: Driver devicemapper failed to remove root filesystem a11bae452da3dd776354aae311da5be5ff70ac9ebf33d33b66a24c62c3ec7f35: Device is Busy
Error: failed to remove containers: [fervent_fermi]

$ sudo systemctl docker stop
$ sudo rm -rf /var/lib/docker/devicemapper/mnt/a11bae452da3dd776354aae311da5be5ff70ac9ebf33d33b66a24c62c3ec7f35
$

이 접근 방식을 사용할 때 docker가 다른 이름으로 이미지를 다시 만든 것을 알았습니다.

a11bae452da3     trend_av_docker   "bash"   2 weeks ago    Dead    compassionate_ardinghelli

이는 컨테이너가 restart = always로 발행 되었기 때문일 수 있지만 컨테이너 ID는 이전에 강제 삭제 한 볼륨을 사용한 컨테이너의 ID와 일치합니다. 이 새 컨테이너를 삭제하는 데 어려움이 없었습니다.

$ sudo docker rm -v compassionate_ardinghelli
compassionate_ardinghelli

1
대안 2 : 이것을 독자적인 답변으로 재 작업하십시오. 그렇게 할 때 다른 답변을 참조하는 것은 괜찮습니다. 그러나 저자의 이름과 같이 어떤 답변에 대해 구체적으로 설명해야합니다. "아직 댓글을 달 수 없습니다 ..."로 시작하면 게시물이 삭제 될 수 있습니다. 답변으로 추가 할 도움이되는 내용이 있으면 바로 실행하세요! (그리고 나가서 9 명 더!) 행운을 빕니다.
Mogsdad

0

이것을 시도해보십시오 centos 1) docker container ls -a 제거하려는 컨테이너 확인 상태 목록을 제공합니다. 여기에 이미지 설명 입력 2) docker container rm -f 97af2da41b2b 큰 팬 포스 플래그는 아니지만 확인 작업을 수행합니다 명령을 다시 실행하거나 나열하면 작동합니다. 여기에 이미지 설명 입력 3) 죽은 컨테이너를 모두 지울 때까지 계속 여기에 이미지 설명 입력


0

죽은 컨테이너 프로세스를 제거하는 가장 좋은 방법은 Docker 서비스를 다시 시작하는 것입니다. 다시 시작 상태로 멈춰서 컨테이너를 제거 할 수 없었고 도커 서비스를 다시 시작했고 저에게 효과적이었습니다.


0

제 경우에는

rm -r /var/lib/docker/containers/<container-id>/

그리고 그것은 작동했습니다. 아마도 그것이 Docker 버전 ~ 19에서 해결하는 방법 일 것입니다. 내 도커 버전은 19.03.12,

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.