Как удалить все тома докеров?


94

Если я сделаю docker volume ls, мой список томов будет таким:

DRIVER              VOLUME NAME
local               305eda2bfd9618266093921031e6e341cf3811f2ad2b75dd7af5376d037a566a
local               226197f60c92df08a7a5643f5e94b37947c56bdd4b532d4ee10d4cf21b27b319
...
...
local               209efa69f1679224ab6b2e7dc0d9ec204e3628a1635fa3410c44a4af3056c301

и я хочу удалить все свои тома сразу. Как я могу это сделать?

Ответы:


194

Официальная команда для удаления всех неиспользуемых данных (включая тома без контейнеров) будет с docker 1.13

docker system prune  

Если вы хотите ограничиться только томами, удалив только неиспользуемые тома :

docker volume prune

У вас также есть docker image prune, docker container pruneи т. Д.
См. Дополнительные сведения в разделе « Удаление неиспользуемых объектов Docker ».

См. Commit 86de7c0 и PR 26108 .

Вы можете увидеть это в действии на play-with-docker.com :

/ # docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
1296a5e47ef3        hello-world         "/hello"            7 seconds ago       Exited (0) 6 seconds ago                       prickly_poincare

/ # docker system  prune
WARNING! This will remove:
        - all stopped containers
        - all volumes not used by at least one container
        - all networks not used by at least one container
        - all dangling images
Are you sure you want to continue? [y/N] y
Deleted Containers:
1296a5e47ef3ab021458c92ad711ad03c7f19dc52f0e353f56f062201aa03a35

Текущий (pre-docker 1.13) способ управления томом был представлен с PR 14242 и docker volumeкомандой , которая документирована в ее комментарии от июля 2015 года:

docker volume rm $(docker volume ls -q --filter dangling=true)

Это здорово, спасибо. Я не знал о новых pruneкомандах.
treeface

3
Команды обрезки хороши, но будьте осторожны с ними. Похоже, они предполагают, что контейнеры работают в то время, когда вы их вызываете. Он удалит вещи, которые могут быть связаны, но не используются активно (например, сети), что приведет к сбоям при следующем запуске существующих контейнеров. Используйте danglingфильтры заранее, если вы не знаете, что можно обрезать :)
jocull

docker system pruneпохоже, не удаляет локальные тома, но docker volume pruneразбирается
Maciek Rek

23

Отредактировано в 2017 году: этот ответ был дан 16 апреля 2016 года и теперь устарел и верен только для версии докеров до 1.13, пожалуйста, используйте ответ от @VonC, теперь он помечен как правильный

Чтобы удалить неиспользуемые тома, вы можете использовать встроенную volume rmкоманду docker . Эта rmкоманда также удаляет любой каталог, /var/lib/docker/volumesкоторый не является томом, поэтому убедитесь, что вы не поместили туда ничего, что хотите сохранить:
Команда для вывода списка томов, немного правильнее, чем у вас:

$ docker volume ls -qf dangling=true

Очистка:

$ docker volume rm $(docker volume ls -qf dangling=true)

подробнее о ls здесь , о rm здесь


1
Я бы не запустил его, не проверив --dry-runсначала список оборванных томов с параметром.
Сергей Родионов

Нет --dry-runварианта.
Харальд Альберс

1
этот ответ подходит, если вы хотите удалить все тома, несмотря ни на что. Благодарность!
Mücahit Yılmaz

5

Вот что я нашел полезным: https://github.com/chadoe/docker-cleanup-volumes

Shellscript для удаления потерянных томов докеров в / var / lib / docker / volume и / var / lib / docker / vfs / dir Docker версии 1.4.1 до 1.11.x

Он в основном выполняет очистку любых потерянных / оборванных томов, но он включает, --dry-runно также отмечает некоторые команды, включенные в докеры (которые указаны в предыдущем комментарии)

Примечание о Docker 1.9 и новее

Чтобы удалить потерянные тома в Docker 1.9 и более поздних версиях, вы также можете использовать встроенные команды docker volume вместо этого скрипта docker-cleanup-volume. Встроенная команда также удаляет любой каталог в / var / lib / docker / volume, который не является томом, поэтому убедитесь, что вы не поместили туда ничего, что хотите сохранить:

Список:

$ docker volume ls -qf dangling=true

Очистка:

$ docker volume rm $(docker volume ls -qf dangling=true)

Или лучше справиться с бездействием, но для Linux:

$ docker volume ls -qf dangling=true | xargs -r docker volume rm

3

Чтобы ответить на вопрос и заимствовать у Марка, это работает:

$ docker volume rm $(docker volume ls -qf dangling=true | xargs)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.