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

죽은 컨테이너를 제거 할 수 없습니다. 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



답변

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

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

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

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


답변

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

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

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

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


답변

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.


답변

죽은 컨테이너를 제거 할 때 다음 오류가 발생했습니다 (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>


답변

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

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

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


답변

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

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>


답변

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

그래서 여기에 오류 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 데몬을 다시 시작해야했고 문제가 해결되었습니다 !!!