2016-01-07 2 views
29

У меня возникли проблемы с удалением тонов докеров с помощью Docker 1.9.1.Docker в объеме используется, но без докерных контейнеров

Я удалил все мои остановленные контейнеры, так что docker ps -a возвращается пустым.

Когда я использую docker volume ls, мне предоставляется целый ряд контейнеров-докеров.

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 

Для значительной части из них. Если у меня нет контейнеров, которые существуют в первую очередь, как используются эти тома?

+7

docker использует подсчет ссылок для проверки того, используется ли громкость; все это делается в памяти; это может быть как ошибка, так и состояние гонки, в результате чего контейнер удаляется, но счетчик не обновляется. Рестарт демона должен устранить это, но, да, возможно, что где-то есть ошибка.Есть ли что-то особенное в вашей настройке (например, вы используете докер-в-докер, Рой?). Используете ли вы какой-либо скрипт или инструмент для очистки контейнеров? – thaJeztah

+1

В докер '1.9.0'. Я пробую ваши шаги и могу удалить все тома. – firelyu

+4

Эй, спасибо @thaJeztah, перезапустив демона Docker ('sudo service docker stop' и' sudo service docker start'), очистил все эти объемы призраков для меня. Более того, похоже, что теперь я могу удалить тома без проблем, используя команду docker rm -v. Только заметные различия в использовании - это то, что я использовал docker-compose на Ubuntu 15.10. Я верну отчет, если мне удастся реплицировать эту проблему, но в противном случае будет достаточно простого перезапуска. Благодаря! – Tkwon123

ответ

31

Гонсалы здесь!

Вы можете использовать эти функции, чтобы удалить все жестоко Докер связанных

removecontainers() { 
    docker stop $(docker ps -aq) 
    docker rm $(docker ps -aq) 
} 

armaggedon() { 
    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, если вы используете Баш) файл и перезагрузить их путем выполнения source ~/Xrc. Кроме того, вы можете просто скопировать вставить их в консоль, а затем (независимо от опции вы взяли перед тем, чтобы получить функции готовые), просто запустите:

armaggedon

Я надеюсь, что это помогает! Это также полезно для простой очистки докеров. Имейте в виду, что это также приведет к удалению ваших изображений, а не только ваших контейнеров (работающих или нет) и ваших томов любого типа.

+0

По этому вопросу команда' docker volume rm' терпела неудачу. Из комментариев, похоже, решение заключается в перезапуске демона докеров, чтобы исправить счетчик ссылок. – BMitch

+1

@BMitch, если вы внимательно прочитаете комментарии, это не решение для этого: '' 'даже после перезагрузки он все еще говорит, что объем докеров используется.' '' ' –

+0

У holms появилась другая проблема, и это не так тот, который разместил вопрос. Посмотрите на один комментарий выше этого. – BMitch

0

Я уверен, что эти тома фактически установлены на вашей системе. Посмотрите/proc/mounts, и вы увидите их там. Вам, вероятно, понадобится sudo umount <path> или sudo umount -f -n <path>. Вы должны иметь возможность установить установленный путь либо в/proc/mounts, либо через docker volume inspect

1

Я довольно новичок в докерах. Я очищал начальный тестовый беспорядок и не смог удалить том. Я остановил все запущенные экземпляры, выполнил docker rmi -f $(docker image ls -q), но все же получил 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's truncated 

Total reclaimed space: 2.273MB 
[0]$ docker volume ls 
DRIVER    VOLUME NAME 
local    uuid 
[0]$ docker volume rm uuid 
uuid 
[0]$ 

https://docs.docker.com/engine/reference/commandline/system_prune/

клиент и демон API оба должны быть по крайней мере, 1,25, чтобы использовать эту команду , Используйте команду на стороне клиента, чтобы проверить версию вашего клиента и демонов API.

+0

Спасибо! Это сделало трюк для меня – manncito

Смежные вопросы