Linux

/
/
Ошибки при удалении docker-контейнера в статусе «dead»

Ошибки при удалении docker-контейнера в статусе «dead»

Симптомы

Не удаляется docker-контейнер в статусе «dead»‎.

Причины

Драйвер файловой системы считает, что docker-контейнер занят процессом.

Решение

Универсальный способ

Удалить все docker-контейнеры в статусе «dead»‎ можно с помощью следующей команды:

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

При работе с драйвером devicemapper

При попытке удаления контейнера в Docker с драйвером devicemapper возникает следующая ошибка:

Error response from daemon: Cannot destroy container <имя_контейнера>: Driver devicemapper failed to remove root filesystem <id_директории_контейнера>: Device is Busy

В этом случае достаточно демонтировать директорию контейнера в каталоге /var/lib/docker/devicemapper/mnt/ с помощью команды:

umount /var/lib/docker/devicemapper/mnt/<id_директории_контейнера>

При работе с драйвером overlay

При попытке удаления контейнера в Docker с драйвером overlay2 возникает следующая ошибка:

Error response from daemon: driver "overlay2" failed to remove root filesystem for : remove /var/lib/docker/overlay/<id_директории_контейнера>/merged: device or resource busy

В данной ситуации необходимо найти процесс, который использует директорию /var/lib/docker/overlay/<id_директории_контейнера>/merged с помощью команды:

grep <id_директории_контейнера> /proc/*/mountinfo

В выводе в начале строки найдите PID процессов, которые используют директорию контейнера:

/proc/1010/mountinfo:546 30 0:56 / /var/lib/docker/overlay2/<id_директории_контейнера>/merged ...
/proc/1515/mountinfo:546 30 0:56 / /var/lib/docker/overlay2/<id_директории_контейнера>/merged ...
/proc/2020/mountinfo:546 30 0:56 / /var/lib/docker/overlay2/<id_директории_контейнера>/merged ...

Проверьте какими службами заняты процессы с помощью команды:

ps -p <pid_процесса> -o comm=

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

Обратите внимание!

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