Docker используется по объему, но Docker-контейнеров нет
У меня были проблемы с удалением томов Docker с помощью Docker 1.9.1.
Я удалил все свои остановленные контейнеры, чтобы docker ps -a
вернулся пустым.
Когда я использую docker volume ls
Docker docker volume ls
, я получаю целый ряд контейнеров Docker:
docker volume ls
DRIVER VOLUME NAME
local a94211ea91d66142886d72ec476ece477bb5d2e7e52a5d73b2f2f98f6efa6e66
local 4f673316d690ca2d41abbdc9bf980c7a3f8d67242d76562bbd44079f5f438317
local eb6ab93effc4b90a2162e6fab6eeeb65bd0e4bd8a9290e1bad503d2a47aa8a78
local 91acb0f7644aec16d23a70f63f70027899017a884dab1f33ac8c4cf0dabe5f2c
local 4932e2fbad8f7e6246af96208d45a266eae11329f1adf176955f80ca2e874f69
local 68fd38fc78a8f02364a94934e9dd3b5d10e51de5b2546e7497eb21d6a1e7b750
local 7043a9642614dd6e9ca013cdf662451d2b3df6b1dddff97211a65ccf9f4c6d47
#etc x 50
Поскольку ни один из этих томов не содержит ничего важного, я пытаюсь очистить все тома с помощью тома docker volume rm $(docker volume ls -q)
.
В процессе большинство удаляется, но я возвращаюсь:
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Для значительной части из них. Если у меня вообще нет контейнеров, как эти тома используются?
Ответы
Ответ 1
Вы можете использовать эти функции, чтобы жестоко удалить все, что связано с Docker:
removecontainers() {
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
}
armageddon() {
removecontainers
docker network prune -f
docker rmi -f $(docker images --filter dangling=true -qa)
docker volume rm $(docker volume ls --filter dangling=true -q)
docker rmi -f $(docker images -qa)
}
Вы можете добавить их в свой файл ~/Xrc
, где X - это файл интерпретатора оболочки (~/.bashrc
если вы используете bash), и перезагрузить их через выполнение source ~/Xrc
. Кроме того, вы можете просто скопировать и вставить их в консоль, а затем (независимо от варианта, который вы использовали ранее для подготовки функций) просто запустить:
armageddon
Это также полезно для обычной очистки Docker. Имейте в виду, что это также приведет к удалению ваших изображений, а не только ваших контейнеров (работающих или нет) и любых ваших томов.
Ответ 2
Возможно, объем был создан с помощью docker-compose
? Если так, это должно быть удалено:
docker-compose down --volumes
Благодарю Нильса Бека Нильсена !
Ответ 3
Я новичок в Docker. Я убирал некоторый начальный беспорядок тестирования и не был в состоянии удалить объем также. Я остановил все запущенные экземпляры, выполнил docker rmi -f $(docker image ls -q)
, но все еще получил Error response from daemon: unable to remove volume: remove uuid: volume is in use
об Error response from daemon: unable to remove volume: remove uuid: volume is in use
.
Я docker system prune
и она очистила все, что нужно для удаления последнего тома:
[0]$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
... about 15 containers UUID truncated
Total reclaimed space: 2.273MB
[0]$ docker volume ls
DRIVER VOLUME NAME
local uuid
[0]$ docker volume rm uuid
uuid
[0]$
docker system prune
API клиента и демона должны быть как минимум 1.25, чтобы использовать эту команду. Используйте команду docker version
на клиенте, чтобы проверить версии API клиента и демона.
Ответ 4
Объем может использоваться одним из остановленных контейнеров. Вы можете удалить такие контейнеры командой:
docker container prune
тогда вы можете удалить неиспользуемые тома
docker volume prune
Ответ 5
Пока тома связаны с контейнером (работающим или нет), их нельзя удалить.
Ты должен бежать
docker inspect <container-id>/<container-name>
на каждом из работающих/не работающих контейнеров, на которых этот том мог быть установлен.
Если том смонтирован на каком-либо из контейнеров, вы должны увидеть его в разделе Mounts выходных данных команды inspect. Что-то вроде этого :-
"Mounts": [
{
"Type": "volume",
"Name": "user1",
"Source": "/var/lib/docker/volumes/user1/_data",
"Destination": "/opt",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
После выяснения ответственного контейнера (ов), используйте: -
docker rm -f container-1 container-2...container-n
в случае работы контейнеров
docker rm container-1 container-2...container-n
в случае неработающих контейнеров
полностью удалить контейнеры с хост-машины.
Затем попробуйте удалить том с помощью команды: -
docker volume remove <volume-name/volume-id>
Ответ 6
Я уверен, что эти тома фактически установлены в вашей системе. Посмотрите /proc/mounts, и вы увидите их там. Вероятно, вам понадобится sudo umount <path>
или sudo umount -f -n <path>
. Вы должны иметь возможность установить установленный путь в /proc/mounts или через docker volume inspect
Ответ 7
В настоящее время вы можете использовать то, что сейчас предлагает докер, для общей и более полной очистки:
docker system prune
Чтобы дополнительно удалить все остановленные контейнеры и все неиспользуемые изображения (не только свисающие изображения), добавьте флаг -a
к команде:
docker system prune -a
Ответ 8
Вы должны ввести эту команду с флагом -f (force):
sudo docker volume rm -f <VOLUME NAME>