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

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

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

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

Ответ 1

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

docker system prune  

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

docker volume prune

У вас также есть docker image prune, docker container prune и т. Д.:
Подробнее см. " Обрезать неиспользуемые объекты докеров ".

См. 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

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

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

Ответ 2

Отредактировано в 2017 году: этот ответ был дан 16 апреля 16 года и теперь устарел и исправлен только для версии докера до 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 здесь

Ответ 3

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

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

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

Обратите внимание на Docker 1.9 и выше

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

Список:

$ docker volume ls -qf dangling=true

Очистка:

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

Или, обрабатывая no-op лучше, чем Linux:

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

Ответ 4

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

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