Как удалить все объемы докеров?
Если я делаю 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)