
Моя история
Однажды я звонилДокериз очереди 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)
Мои вопросы
Как удалить контейнеры Docker, если демон Docker не отвечает?
Я использую 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.