Смонтированные 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 запрос, это не удалит "удаленные" тома на основе драйвера.

Другие вопросы по тегам