Назад | Перейти на главную страницу

docker volume rm --force не влияет

Согласно официальная документация можно "принудительно" удалить том. Документация остается довольно неопределенной, что подразумевается под --force. То, что я до сих пор обнаружил в Интернете, подразумевает удаление томов, которые все еще используются другими контейнерами.

Используя --force вариант, похоже, не влияет:

$ docker volume create mydata
$ docker docker run -v mydata:/mydata alpine:latest /bin/sh -c "touch /mydata/mydata.test; ls /mydata"
$ docker volume rm --force mydata
Error response from daemon: unable to remove volume: remove mydata: volume is in use - [1cbcfa3d47a32db7b0075e113216f7146a436a4da22a97dc2f7b60c68de95c3d]

Это тот же результат, что и при отсутствии --force флаг. Это ошибка или я что-то не понимаю?

$ docker version
Client:
 Version:       18.01.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    03596f5
 Built: Wed Jan 10 20:09:13 2018
 OS/Arch:       linux/amd64
 Experimental:  false
 Orchestrator:  swarm
Server:
 Engine:
  Version:      18.01.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   03596f5
  Built:        Wed Jan 10 20:07:43 2018
  OS/Arch:      linux/amd64
  Experimental: false

Меня раздражают все ответы на все сообщения, которые НЕ предоставляют решения для случая, упомянутого OP: флаг --force НЕ ПОМОГАЕТ.

Обходной путь (ВНИМАНИЕ, вы действительно должны знать, что делаете!):

docker volume ls # To list the volumes which currently exist

# To get the absolute path to the directory on your system where docker
# actually stores this volume
docker volume inspect --format '{{ .Mountpoint }}' <volume-name> 

# E.g. sudo rm -rf /var/lib/docker/volumes/database_volume (without the 
# _data directory)
sudo rm -rf <path-from-above> 

# Needed so docker will reload its volumes-directory to no longer list the
# deleted volume under docker volume ls and no longer make headaches on any
# build- or run-attempts.
sudo service docker restart 

используйте флаг --filter, чтобы увидеть, какие контейнеры используют том:

docker ps --filter volume=mydata

затем остановите контейнер, который использует этот том.

Наконец, удалите том, если хотите:

docker volume rm --force mydata

По моему опыту, -f Флаг делает команду не сбойной, если том не существует. Это похоже на то, как классический rmкоманда работает.

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