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!!!
따라서 nginx
pid 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>
grep 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 /proc/*/mountinfo
그런 다음 PID를 찾아 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3and
죽여
다음 명령을 실행 해보십시오. 그것은 항상 나를 위해 작동합니다.
# docker volume rm $(docker volume ls -qf dangling=true)
# docker rm $(docker ps -q -f 'status=exited')
위의 명령을 실행 한 후 docker를 다시 시작하십시오.
# service docker restart
위의 제안을 시도했지만 작동하지 않았습니다.
그때
- 나는 시도 :
docker system prune -a
, 처음에는 작동하지 않았습니다. - 시스템을 재부팅합니다
- 다시 시도합니다
docker system prune -a
. 이번에는 작동합니다. 경고 메시지를 보내고 결국 "계속 하시겠습니까? y / n?. Ans : y. 시간이 지나면 결국 죽은 컨테이너가 사라집니다. - 확인
docker ps -a
중요 -이것은 모든 컨테이너 + 이미지를 파괴하므로 핵 옵션입니다.
위의 모든 것을 시도했습니다 (재부팅 / 도커 다시 시작 부족).
그래서 여기에 오류 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 데몬을 다시 시작해야했고 문제가 해결되었습니다 !!!
여기에는 많은 답변이 있지만 그중 어느 것도 나를 위해 일한 (빠른) 솔루션과 관련이 없습니다.
Docker 버전 1.12.3, 빌드 6b644ec를 사용하고 있습니다.
docker rmi <image-name>
죽은 용기가 온 곳에서 이미지를 찾기 위해 달려갔습니다 . A docker ps -a
는 죽은 용기가 완전히 사라진 것을 보여주었습니다.
그런 다음 물론 이미지를 다시 당기고 컨테이너를 다시 실행했습니다.
이 상태에서 어떻게 발견되었는지는 모르겠지만 ..
시도해보십시오.
$ 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
나를 위해 일한 이것을 시도하십시오.
docker rm -f <container_name>
eg. docker rm -f 11667ef16239
Windows의 경우 :
del D:\ProgramData\docker\containers\{CONTAINER ID}
del D:\ProgramData\docker\windowsfilter\{CONTAINER ID}
그런 다음 Docker Desktop을 다시 시작하십시오.
Running on Centos7 & Docker 1.8.2, I was unable to use Zgr3doo's solution to umount by devicemapper ( I think the response I got was that the volume wasn't mounted/found. )
I think I also had a similar thing happen with sk8terboi87 ツ 's answer: I believe the message was that the volumes couldn't be unmounted, and it listed the specific volumes that it tried to umount in order to delete the dead containers.
What did work for me was stopping docker first, and then deleting the directories manually. I was able to determine which ones they were by the error output of previous command to delete all the dead containers.
Apologies for the vague descriptions above. I found this SO question days after I handled the dead containers. .. However, I noticed a similar pattern today:
$ 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
$
I did notice, when using this approach that docker re-created the images with different names:
a11bae452da3 trend_av_docker "bash" 2 weeks ago Dead compassionate_ardinghelli
This may have been due to the container being issued with restart=always, however, the container ID matches the ID of the container that previously used the volume that I force-deleted. There were no difficulties deleting this new container:
$ sudo docker rm -v compassionate_ardinghelli
compassionate_ardinghelli
Try kill it and then remove >:) i.e.
docker kill $(docker ps -q)
Try this it worked for me on centos 1) docker container ls -a gives you a list of containers check status which you want to get rid of 2) docker container rm -f 97af2da41b2b not a big fan force flag but does the work to check it worked just fire the command again or list it.
3) continue till we clear all dead containers
For Deleting all dead container
docker rm -f $(docker ps --all -q -f status=dead)
For deleting all exited container
docker rm -f $(docker ps --all -q -f status=exited)
As I have -f
is necessary
참고URL : https://stackoverflow.com/questions/30794108/docker-cannot-remove-dead-container
'program tip' 카테고리의 다른 글
__getitem__ 메서드 이해 (0) | 2020.10.24 |
---|---|
왜 rake db : migrate : reset이 rake -T에 나열되지 않습니까? (0) | 2020.10.23 |
버전 제어 시작하기 (0) | 2020.10.23 |
파일 또는 어셈블리 'Microsoft.Web.Infrastructure, (0) | 2020.10.23 |
Laravel과 Eloquent를 사용하여 두 날짜 사이를 쿼리하는 방법은 무엇입니까? (0) | 2020.10.23 |