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


и снова запустите докер ps-a:



docker ps -a
CONTAINER ID STATUS
11667ef16239 Dead
788   13  

13 ответов:

скорее всего, произошла ошибка, когда демон попытался очистить контейнер, и теперь он застрял в этом состоянии "зомби".

боюсь, что ваш единственный вариант здесь-вручную очистить его:

$ 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)

но я действительно не уверен, почему и как контейнеры. Эта ошибка кажется связанной 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.

у меня была следующая ошибка при удалении мертвого контейнера (docker 17.06.1-ce на CentOS 7):

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. проверьте, какие другие процессы также используют ресурсы docker

$ 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. Проверьте имя процесса выше пид

$ 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 разделяет то же пространство имен монтирования с контейнерами docker, что предотвращает его удаление.)

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

крепление вашего мертвого контейнера устройства mapper должны быть удалены, несмотря на это сообщение. То есть вы больше не получите доступ к этому пути:

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

grep 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 /proc/*/mountinfo

затем найти пид 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3and и убить его

Я пробовал предложения выше, но не работает.

затем

  1. Я : docker system prune -a, Это не сработало в первый раз
  2. Я перезагружаю систему
  3. Я попробую еще раз docker system prune -a. На этот раз он работает. Он отправит предупреждающее сообщение и в конце спросит: "Вы уверены, что хотите продолжить? y / n? . Ответ: да . Это будет время от времени, и в конце концов мертвые контейнеры исчезли.
  4. проверить с помощью docker ps -a

попробуйте выполнить следующие команды. Это всегда работает на меня.

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

после выполнения указанных выше команд, перезапустить настройки,

# service docker restart

запуск на Centos7 & Docker 1.8.2, я не смог использовать решение Zgr3doo для umount by devicemapper (я думаю, что ответ, который я получил, заключался в том, что Том не был смонтирован/найден. )

Я думаю, что у меня также была аналогичная вещь с ответом sk8terboi87 ツ: я считаю, что сообщение состояло в том, что Тома не могут быть размонтированы, и в нем перечислены конкретные тома, которые он пытался размонтировать, чтобы удалить мертвые контейнеры.

то, что действительно работало для меня, останавливало докера сначала, а затем удаление каталогов вручную. Я смог определить, какие из них были по ошибке вывода предыдущей команды, чтобы удалить все мертвые контейнеры.

извиняюсь за расплывчатое описание. Я нашел этот вопрос через несколько дней после того, как я обработал мертвые контейнеры. .. Однако сегодня я заметил похожую картину:

$ 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
$

Я заметил, что при использовании этого подхода докер воссоздал изображения с разными имена:

a11bae452da3     trend_av_docker   "bash"   2 weeks ago    Dead    compassionate_ardinghelli

возможно, это было связано с тем, что контейнер был выпущен с restart=always, однако идентификатор контейнера совпадает с идентификатором контейнера, который ранее использовал том, который я принудительно удалил. Не было никаких трудностей с удалением этого нового контейнера:

$ sudo docker rm -v compassionate_ardinghelli
compassionate_ardinghelli

попробовать убить его, а затем удалить >:), т. е.
docker kill $(docker ps -q)

пробовал все вышеперечисленное (за исключением Reboot/ restart docker).

Итак, вот ошибка 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, и это исправило проблему!!!

попробуйте это он работал для меня на centos 1) докер контейнер ls-a дает вам список контейнеров проверить статус, который вы хотите избавиться enter image description here 2) докер контейнер rm-f 97af2da41b2b не большой флаг силы вентилятора, но делает работу чтобы проверить, что это сработало, просто запустите команду снова или Перечислите ее. enter image description here 3) продолжайте, пока мы не очистим все мертвые контейнеры enter image description here

Comments

    Ничего не найдено.