Удалить именованный том с помощью docker-compose?

Если у меня есть файл для создания докеров, например:

version: "3"
services:
  postgres:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/db
volumes:
  db-data:

... затем выполнение docker-compose up создает именованный том для db-data. Есть ли способ удалить этот том через docker-compose? Если бы это был анонимный том, то docker-compose rm -v postgres сделал бы свое дело. Но в нынешнем виде я не знаю, как удалить том db-data, не возвращаясь к командам docker. Такое ощущение, что это должно быть возможно из docker-compose CLI. Я что-то упускаю?


person Bosh    schedule 04.08.2017    source источник


Ответы (4)


docker-compose down -v

удаляет все прикрепленные тома. См. документы.

person herm    schedule 04.08.2017
comment
Вы также можете использовать docker-compose rm -f -v - person Tarun Lalwani; 06.08.2017
comment
@herm Спасибо, работает. Комментарий выше мой не работает для названных томов, как четко указано в документации. Кстати, меня очень сбивает с толку тот факт, что параметры с одинаковыми именами (-v) ведут себя совершенно по-разному в зависимости от команды (rm vs down). - person qqilihq; 08.11.2017
comment
Хотя это и не docker-compose как таковое, вы также можете удалить том с помощью docker volume rm [name], например, docker volume rm db-data. См. Также docker volume prune - person David Thomas; 18.12.2017
comment
При этом удаляются только анонимно созданные тома, но не именованные. - person emix; 07.12.2018
comment
Если вы не хотите дублировать данные конфигурации, вам нужно проанализировать docker-compose.yaml и выполнить docker volume rm на основе найденных томов. - person rhoerbe; 18.12.2018
comment
Я считаю, что вопрос заключается в том, как удалить определенный именованный том, а не все из них. Это возможно? - person mihow; 10.01.2019

Невозможно настроить удаление определенного именованного тома с помощью docker-compose cli. Вместо этого это можно сделать с помощью docker cli. См. документы.

Используйте docker volume ls, чтобы найти имя определенного тома.

Удалите том с помощью docker volume rm VOLUME_NAME. Вам нужно будет остановить и удалить контейнеры, используя том.

Пример подхода:

# Stop and remove container's using the target volume
docker-compose stop NAME_OF_CONTAINER

# We need the force flag, "-f", as the container is still bound to the volume
docker-compose rm -f NAME_OF_CONTAINER

# Next find your volume name in the following list
docker volume ls

# Finally remove the volume
docker volume rm VOLUME_NAME
person jamsinclair    schedule 17.10.2019

У меня была такая же проблема, как и у вас, за исключением того, что я хотел отказаться от рабочего состояния моего контейнера grafana, оставив работающими другие контейнеры, которые работают отдельно (например, sudo docker-compose up -d). Вот процедура, которую я придумал:

sudo docker-compose ps
sudo docker-compose stop grafana
sudo docker-compose rm --force grafana
sudo docker volume rm metricsmonitoring_grafana_data
sudo docker-compose up --force-recreate -d grafana

Я не знаю (не играя дальше), как лучше всего определить имя тома докера, который нужно удалить.

Это на docker-compose версии 1.18.0

person Cameron Kerr    schedule 26.11.2019

Это удаляет все контейнеры, сети, тома и образы, определенные в файле docker-compose.

docker-compose down -v --rmi all

-v для всех томов

--rmi all для всех изображений

person Kai    schedule 29.03.2021