Ich habe Probleme beim Entfernen von Docker-Volumes mit Docker 1.9.1.
Ich habe alle meine gestoppten Container entfernt, sodass docker ps -a
Leer zurückkehrt.
Wenn ich docker volume ls
Verwende, bekomme ich eine ganze Reihe von Docker-Containern:
docker volume ls
DRIVER VOLUME NAME
local a94211ea91d66142886d72ec476ece477bb5d2e7e52a5d73b2f2f98f6efa6e66
local 4f673316d690ca2d41abbdc9bf980c7a3f8d67242d76562bbd44079f5f438317
local eb6ab93effc4b90a2162e6fab6eeeb65bd0e4bd8a9290e1bad503d2a47aa8a78
local 91acb0f7644aec16d23a70f63f70027899017a884dab1f33ac8c4cf0dabe5f2c
local 4932e2fbad8f7e6246af96208d45a266eae11329f1adf176955f80ca2e874f69
local 68fd38fc78a8f02364a94934e9dd3b5d10e51de5b2546e7497eb21d6a1e7b750
local 7043a9642614dd6e9ca013cdf662451d2b3df6b1dddff97211a65ccf9f4c6d47
#etc x 50
Da keines dieser Volumes etwas Wichtiges enthält, versuche ich, alle Volumes mit docker volume rm $(docker volume ls -q)
zu löschen.
Dabei werden die meisten entfernt, aber ich bekomme zurück:
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
Für einen beträchtlichen Teil von ihnen. Wenn überhaupt keine Container vorhanden sind, wie werden diese Volumes verwendet?
Mit diesen Funktionen können Sie alles, was mit Docker zu tun hat, brutal entfernen:
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)
}
Sie können diese zu Ihrer ~/Xrc
- Datei hinzufügen, wobei X Ihre Shell-Interpreterdatei ist (~/.bashrc
, Wenn Sie bash verwenden), und sie durch Ausführen von source ~/Xrc
Neu laden. Sie können sie auch einfach kopieren, in die Konsole einfügen und anschließend (unabhängig von der Option, die Sie zuvor gewählt haben, um die Funktionen vorzubereiten) einfach ausführen:
armageddon
Es ist auch nur für die allgemeine Bereinigung von Docker nützlich. Bedenken Sie, dass dadurch auch Ihre Bilder entfernt werden, nicht nur Ihre Container (entweder in Betrieb oder nicht) und Ihre Volumes jeglicher Art.
Vielleicht wurde das Volume über docker-compose
Erstellt? Wenn ja, sollte es entfernt werden von:
docker-compose down --volumes
Dank an Niels Bech Nielsen !
Ich bin ziemlich neu bei Docker. Ich räumte ein anfängliches Testproblem auf und konnte auch kein Volume entfernen. Ich hatte alle laufenden Instanzen angehalten, eine docker rmi -f $(docker image ls -q)
ausgeführt, aber trotzdem die Error response from daemon: unable to remove volume: remove uuid: volume is in use
.
Ich habe ein docker system Prune
und es wurde aufgeräumt, was benötigt wurde, um das letzte Volume zu entfernen:
[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]$
Die Client- und Daemon-API müssen mindestens 1.25 sein, um diesen Befehl verwenden zu können. Verwenden Sie die
docker version
Befehl auf dem Client, um die Versionen Ihrer Client- und Daemon-API zu überprüfen.
Der Datenträger kann von einem der angehaltenen Container verwendet werden. Sie können solche Container mit folgendem Befehl entfernen:
docker container Prune
dann können Sie nicht verwendete Volumes entfernen
docker volume Prune
Solange Datenträger einem Container zugeordnet sind (entweder aktiv oder nicht), können sie nicht entfernt werden.
Du musst rennen
docker inspect <container-id>/<container-name>
auf jedem der laufenden/nicht laufenden Container, auf denen dieses Volume möglicherweise bereitgestellt wurde.
Wenn das Volume in einen der Container eingebunden ist, sollte es im Abschnitt Mounts der Ausgabe inspect command angezeigt werden. Etwas wie das :-
"Mounts": [
{
"Type": "volume",
"Name": "user1",
"Source": "/var/lib/docker/volumes/user1/_data",
"Destination": "/opt",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
Nachdem Sie die verantwortlichen Behälter herausgefunden haben, verwenden Sie:
docker rm -f container-1 container-2 ...container-n
bei laufenden Containern
docker rm container-1 container-2 ...container-n
bei nicht laufenden Containern
um die Container vollständig vom Host-Computer zu entfernen.
Versuchen Sie dann, das Volume mit dem folgenden Befehl zu entfernen:
docker volume remove <volume-name/volume-id>
Ich bin mir ziemlich sicher, dass diese Volumes tatsächlich auf Ihrem System bereitgestellt sind. Schauen Sie in/proc/mounts und Sie werden sie dort sehen. Sie müssen wahrscheinlich Sudo umount <path>
Oder Sudo umount -f -n <path>
Eingeben. Sie sollten in der Lage sein, den gemounteten Pfad entweder in/proc/mounts oder über docker volume inspect
Abzurufen.
Derzeit können Sie das, was Docker jetzt bietet, für eine allgemeine und umfassendere Reinigung verwenden:
docker system Prune
Um zusätzlich alle angehaltenen Container und alle nicht verwendeten Bilder (nicht nur baumelnde Bilder) zu entfernen, fügen Sie das -a
Fahne zum Befehl:
docker system Prune -a