Як видалити всі томи докера?


94

Якщо я це роблю docker volume ls, мій список томів такий:

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

і я хочу видалити всі свої томи одночасно. Як я можу це зробити?

Відповіді:


194

Офіційна команда видалити всі невикористані дані (включаючи томи без контейнерів) буде з докером 1.13

docker system prune  

Якщо ви хочете обмежити лише томи, видаливши лише невикористані томи :

docker volume prune

У вас також є docker image prune, docker container pruneтощо:
Див. Більше в " Обрізання невикористаних об'єктів Docker ".

Див. Коміт 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
розбирає

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 / volumes та / var / lib / docker / vfs / dir Docker версії 1.4.1 до 1.11.x

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

Примітка щодо Docker 1.9 та новіших версій

Щоб видалити осиротілі томи в Docker 1.9 та новіших версіях, ви також можете використовувати вбудовані команди обсягу докера замість цього сценарію docker-cleanup-volumes. Вбудована команда також видаляє будь-який каталог у / 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.