Смонтированные Docker монтировали тома хоста?
Я только что проверил свою папку / var / lib / docker / volume и обнаружил, что она переполняется папками с именами UUID Docker, каждая из которых содержит файл config.json с содержимым, аналогичным
{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true}
где
/path/to/mounted/volume
это путь к папке на хосте, который был смонтирован в док-контейнере с переключателем -v в какой-то момент. У меня есть такие папки, начиная с начала моих экспериментов с Docker, то есть около 3 недель назад.
Рассматриваемые контейнеры были остановлены, и докер был удален давно, поэтому я не могу видеть, что эти записи не истекли их датой продажи. Возникает вопрос: осталась ли ошибка, или нужно вручную удалить такие записи из / var / lib / docker / volume?
3 ответа
Для Docker 1.9 и выше есть собственный путь:
Перечислите все потерянные тома с помощью
$ docker volume ls -qf dangling=true
Устранить их всех
$ docker volume rm $(docker volume ls -qf dangling=true)
Из руководства пользователя Docker:
Если вы удалите контейнеры, которые монтируют тома, включая начальный контейнер dbdata или последующие контейнеры db1 и db2, тома не будут удалены. Чтобы удалить том с диска, вы должны явно вызвать docker rm -v для последнего контейнера со ссылкой на том. Это позволяет вам обновлять или эффективно переносить тома данных между контейнерами. - источник
Это намеренное поведение, чтобы избежать случайной потери данных. Вы можете использовать инструмент типа https://github.com/chadoe/docker-cleanup-volumes для очистки неиспользуемых томов.
Для номеров версий Docker 1.13+ и ce/ee 17+ используйте volume prune
команда
docker volume prune
в отличие от dangling=true
запрос, это не удалит "удаленные" тома на основе драйвера.