Ответ 1
Для Docker 1.9 и там есть родной путь:
Список всех потерянных томов с помощью
$ docker volume ls -qf dangling=true
Устраните все из них с помощью
$ docker volume rm $(docker volume ls -qf dangling=true)
Я только что просмотрел папку my/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, т.е. Около трех недель назад.
Контейнеры, о которых идет речь, были остановлены, и докеры давно появились, поэтому я не вижу, чтобы эти записи не проходили мимо их даты продажи. Это вызывает вопрос - осталось ли я, что я вижу ошибку, или нужно вручную отбросить такие записи из/var/lib/docker/томов?
Для 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 против последнего контейнера со ссылкой на том. Это позволяет вам обновлять или эффективно переносить объемы данных между контейнерами. - источник
Это преднамеренное поведение, чтобы избежать случайной потери данных. Вы можете использовать инструмент, например docker-cleanup-volumes, чтобы очистить неиспользуемые тома.
Для версий Docker 1.13+ и ce/ee 17+ используйте команду volume prune
docker volume prune
В отличие от запроса dangling=true
, это не приведет к удалению "remote" томов на основе драйверов.