web-dev-qa-db-fra.com

Docker est en cours d'utilisation, mais il n'y a pas de conteneur Docker

La suppression de volumes Docker avec Docker 1.9.1 me pose problème.

J'ai supprimé tous mes conteneurs arrêtés pour que docker ps -a soit vide.

Lorsque j'utilise docker volume ls, on me donne une foule de conteneurs Docker:

docker volume ls
DRIVER              VOLUME NAME
local               a94211ea91d66142886d72ec476ece477bb5d2e7e52a5d73b2f2f98f6efa6e66
local               4f673316d690ca2d41abbdc9bf980c7a3f8d67242d76562bbd44079f5f438317
local               eb6ab93effc4b90a2162e6fab6eeeb65bd0e4bd8a9290e1bad503d2a47aa8a78
local               91acb0f7644aec16d23a70f63f70027899017a884dab1f33ac8c4cf0dabe5f2c
local               4932e2fbad8f7e6246af96208d45a266eae11329f1adf176955f80ca2e874f69
local               68fd38fc78a8f02364a94934e9dd3b5d10e51de5b2546e7497eb21d6a1e7b750
local               7043a9642614dd6e9ca013cdf662451d2b3df6b1dddff97211a65ccf9f4c6d47
#etc x 50

Puisqu'aucun de ces volumes ne contient quoi que ce soit d'important, j'essaie de purger tous les volumes avec docker volume rm $(docker volume ls -q).

Dans le processus, la majorité est supprimée, mais je reviens:

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

Pour une partie importante d'entre eux. Si je n'ai pas de conteneurs existants, comment ces volumes sont-ils utilisés?

97
Tkwon123

Vous pouvez utiliser ces fonctions pour supprimer brutalement tout ce qui concerne 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)
}

Vous pouvez les ajouter à votre fichier ~/Xrc, où X est votre fichier interpréteur Shell (~/.bashrc si vous utilisez bash) et les recharger via l'exécution de source ~/Xrc. En outre, vous pouvez simplement copier-coller dans la console et ensuite (quelle que soit l'option que vous avez prise auparavant pour obtenir les fonctions prêtes), exécutez simplement:

armageddon

C'est également utile pour le nettoyage général de Docker. N'oubliez pas que cela supprimera également vos images, non seulement vos conteneurs (qu'ils soient exécutés ou non) et vos volumes, quels qu'ils soient.

102

Peut-être que le volume a été créé via docker-compose? Si oui, il devrait être supprimé par:

docker-compose down --volumes

Crédit à Niels Bech Nielsen !

60
Robert K. Bell

Je suis assez nouveau chez Docker. Je nettoyais quelques tests initiaux et je n’étais pas capable de supprimer un volume non plus. J'avais arrêté toutes les instances en cours d'exécution, effectué une docker rmi -f $(docker image ls -q), mais j'avais quand même reçu le _Error response from daemon: unable to remove volume: remove uuid: volume is in use_.

J'ai fait un _docker system Prune_ et il a nettoyé ce qui était nécessaire pour supprimer le dernier volume:

_[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

Les API client et démon doivent toutes les deux être au moins 1.25 pour utiliser cette commande. Utilisez la commande _docker version_ sur le client pour vérifier les versions de vos API client et démon.

49
Benjamin West

Le volume peut être utilisé par l'un des conteneurs arrêtés. Vous pouvez supprimer ces conteneurs par la commande:

docker container Prune

alors vous pouvez supprimer les volumes non utilisés

docker volume Prune
19

Tant que les volumes sont associés à un conteneur (en cours d'exécution ou non), ils ne peuvent pas être supprimés.

Tu dois courir

docker inspect <container-id>/<container-name>

sur chacun des conteneurs en cours d'exécution ou non exécutés sur lesquels ce volume a peut-être été monté.

Si le volume est monté sur l'un des conteneurs, vous devez le voir dans la section Montages de la sortie commande d'inspection. Quelque chose comme ça :-

"Mounts": [
            {
                "Type": "volume",
                "Name": "user1",
                "Source": "/var/lib/docker/volumes/user1/_data",
                "Destination": "/opt",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

Après avoir déterminé le ou les conteneurs responsables, utilisez: -

docker rm -f container-1 container-2 ...container-n en cas de conteneurs en cours d'exécution

docker rm container-1 container-2 ...container-n en cas de non-exécution des conteneurs

supprimer complètement les conteneurs de la machine hôte.

Puis essayez de supprimer le volume en utilisant la commande: -

docker volume remove <volume-name/volume-id>

6
Supreeth Padavala

Je suis à peu près sûr que ces volumes sont réellement montés sur votre système. Regardez dans/proc/mounts et vous les verrez là-bas. Vous aurez probablement besoin de Sudo umount <path> ou Sudo umount -f -n <path>. Vous devriez pouvoir obtenir le chemin monté soit dans/proc/mounts, soit via docker volume inspect

2
Jiri Klouda

Actuellement, vous pouvez utiliser ce que docker offre maintenant pour un nettoyage général et plus complet:

docker system Prune

Pour supprimer en outre tous les conteneurs arrêtés et toutes les images inutilisées (pas seulement les images pendantes), ajoutez l'indicateur -a à la commande:

docker system Prune -a
1
shackra