Я вызвал сбой Docker из-за перегрузки контейнера. Как мне их удалить?

Я вызвал сбой Docker из-за перегрузки контейнера. Как мне их удалить?

Моя история

Однажды я звонилДокериз очереди PHP laravel для обработки тысяч медиафайлов. Мой код создавал новый контейнер для каждой задачи, которую я хотел выполнить (например, «обработать», «поиск», «срез» и т. д.). Затем я пошел спать, и случилась катастрофа. Я проснулся с файлом журнала на 1 ТБ и несколькими сотнями тысяч контейнеров в различных состояниях.

Docker больше не работает. То есть, когда я печатаю docker version(или docker anythingесли на то пошло), он просто сидит и смотрит. Я не могу удалить контейнеры через стандарт, docker rm $(docker ps -a -q)потому что Docker стал очень, очень подавленным.

Вот важная информация о том, как я в настоящее время вызываю демон:

$> sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock
INFO[0000] [graphdriver] using prior storage driver "aufs"

(Meanwhile in another terminal)
$> docker version
(insert infinite darkness here)

Мои вопросы

  1. Как удалить контейнеры Docker, если демон Docker не отвечает?

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

решение1

Ну, я немного покопался.

Как удалить контейнеры Docker, если демон Docker не отвечает?

В Ubuntu контейнеры хранятся в /var/lib/docker/containersкаталоге. Удалите содержимое этого каталога и все станет намного лучше.

Также, для тех, кому интересно, было около 250 тыс. контейнеров, которые нужно было удалить. Учитывая количество файлов, с которыми мне пришлось работатьls /var/lib/docker/containers | xargs -n200 rm -rf

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

Если контейнер больше не будет использоваться, вам следует официально "удалить" его после того, как вы закончите. В командной строке это будет сделано с помощью , docker rm $(containername)а в коде это будет полностью зависеть от того, как осуществляется доступ к docker.

Связанный контент