Подтвердить что ты не робот

Докер - Не удается удалить мертвый контейнер

Я не могу удалить мертвый контейнер, он появляется снова после перезапуска службы Docker.

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead

Тогда

docker rm -f 11667ef16239

Затем, когда я запускал докер ps -a, никаких контейнеров-докеров не показывалось.

docker ps -a
CONTAINER ID         STATUS

Однако, когда я перезапускаю службу докеров,

service docker restart

И запустите docker ps -a снова:

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead
4b9b3361

Ответ 1

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

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

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

Где <storage_driver> - имя вашего драйвера (aufs, overlay, btrfs или devicemapper).

Ответ 2

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

Итак, если вы получите сообщение вроде этого

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

и вы можете обычно удалить контейнер после этого

Ответ 3

Вы также можете удалить контейнеры 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.

Ответ 4

У меня была следующая ошибка при удалении мертвого контейнера (докер 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. Проверьте, какие другие процессы также используют ресурсы докеров

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

Ответ 5

У меня такая же проблема, и оба ответа не помогли.

Что помогло мне - просто создать отсутствующие каталоги и удалить их:

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

Ответ 6

Удаление контейнера силой помогло мне.

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>

Ответ 7

grep 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 /proc/*/mountinfo

то найдите pid 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3and и убейте его

Ответ 8

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

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

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

# service docker restart

Ответ 9

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

затем

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

ВАЖНО - это ядерный вариант, поскольку он уничтожает все контейнеры + изображения

Ответ 10

Перепробовал все вышеперечисленное (если не считать перезагрузки/перезапуска докера).

Итак, вот ошибка 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 и, к моему удивлению, нашел:

[[email protected] SeGrid]$ ps -p 20416
  PID TTY          TIME CMD
20416 ?        00:00:19 ntpd

Настоящий момент WTF. Поэтому я решил проблему с помощью Google и нашел это: Затем нашел этот https://github.com/docker/for-linux/issues/124

Оказывается, мне пришлось перезапустить демон ntp, и это решило проблему !!!

Ответ 11

Здесь есть много ответов, но ни один из них не касается (быстрого) решения, которое сработало для меня.

Я использую Docker версии 1.12.3, сборка 6b644ec.

Я просто запустил docker rmi <image-name> для изображения, откуда пришел мертвый контейнер. docker ps -a затем показал, что мертвый контейнер полностью отсутствует.

Затем, конечно, я просто снова вытащил изображение и снова запустил контейнер.

Я понятия не имею, как он оказался в этом состоянии, но так оно и есть...

Ответ 12

Попробуй, у меня сработало

$ 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
[[email protected] containers]#  ls -l
total 0
drwx------. 1 root root 312 Nov 17 08:58 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
[[email protected] containers]# rm -rf 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
systemctl restart docker

Ответ 13

Попробуйте это у меня сработало:

docker rm -f <container_name>

eg. docker rm -f 11667ef16239

Ответ 14

для Windows:

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

Затем перезапустите Docker Desktop.

Ответ 15

Запуск на 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

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

$ sudo docker rm -v compassionate_ardinghelli
compassionate_ardinghelli

Ответ 16

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

Ответ 17

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

Ответ 18

  1. Для удаления всех мертвых контейнеров docker rm -f $(docker ps --all -q -f status=dead)

  2. Для удаления всего docker rm -f $(docker ps --all -q -f status=exited) из контейнера docker rm -f $(docker ps --all -q -f status=exited)

Как у меня -f необходимо