web-dev-qa-db-de.com

Docker wird gerade verwendet, es sind jedoch keine Docker-Container vorhanden

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?

97
Tkwon123

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.

102

Vielleicht wurde das Volume über docker-compose Erstellt? Wenn ja, sollte es entfernt werden von:

docker-compose down --volumes

Dank an Niels Bech Nielsen !

60
Robert K. Bell

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]$

docker system Prune

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.

49
Benjamin West

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
19

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>

6

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.

2
Jiri Klouda

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
1
shackra