Docker utilise /var/lib/docker pour stocker vos images, vos conteneurs et vos volumes locaux nommés. La suppression de ce répertoire peut entraîner une perte de données et éventuellement empêcher le moteur de fonctionner. Le sous-répertoire overlay2 contient spécifiquement les différents éléments suivants couches du système de fichiers pour les images et les conteneurs.
Pour nettoyer les conteneurs et les images inutilisés, voir docker system prune
. Il existe également des options permettant de supprimer des volumes et même des images marquées, mais elles ne sont pas activées par défaut en raison du risque de perte de données :
$ docker system prune --help
Usage: docker system prune [OPTIONS]
Remove unused data
Options:
-a, --all Remove all unused images not just dangling ones
--filter filter Provide filter values (e.g. 'label=<key>=<value>')
-f, --force Do not prompt for confirmation
--volumes Prune volumes
Ce qu'un pruneau ne supprimera jamais inclut :
- les conteneurs en cours d'exécution (liste avec
docker ps
)
- sur ces conteneurs (voir ce poste pour plus de détails sur la limitation de la taille des journaux)
- les modifications du système de fichiers effectuées par ces conteneurs (visibles à l'aide de la fonction
docker diff
)
De plus, tout ce qui est créé en dehors des dossiers normaux de docker peut ne pas être vu par docker pendant ce garbage collection. Cela peut provenir d'une autre application écrivant dans ce répertoire, ou d'une configuration précédente du moteur de docker (par exemple en passant d'AUFS à overlay2, ou éventuellement après avoir activé les espaces de noms des utilisateurs).
Que se passerait-il si ce conseil était ignoré et que vous supprimiez un seul dossier comme overlay2 de ce système de fichiers ? Les systèmes de fichiers des conteneurs sont assemblés à partir d'une collection de couches de systèmes de fichiers, et le dossier overlay2 est l'endroit où docker effectue certains de ces montages (vous les verrez dans la sortie de mount
lorsqu'un conteneur est en cours d'exécution). La suppression de certains d'entre eux lorsqu'ils sont utilisés supprimerait des morceaux du système de fichiers d'un conteneur en cours d'exécution, et briserait probablement la capacité de démarrer un nouveau conteneur à partir d'une image affectée. Voir t pour l'un des nombreux résultats possibles.
Pour rafraîchir complètement docker à un état propre, vous pouvez supprimer le répertoire entier, et pas seulement les sous-répertoires comme overlay2 :
# danger, read the entire text around this code before running
# you will lose data
sudo -s
systemctl stop docker
rm -rf /var/lib/docker
systemctl start docker
exit
Le moteur redémarrera dans un état complètement vide, ce qui signifie que vous perdrez tout :
- images
- conteneurs
- volumes nommés
- réseaux créés par les utilisateurs
- état de l'essaim
5 votes
Avez-vous trouvé une réponse à cette question ? Je rencontre toujours le même problème.
22 votes
J'ai couru
docker image prune --all
et ensuitedocker system prune -a
. Il m'a permis de récupérer environ 50 Go d'espace disque, qui était occupé par des fichiers sous /var/lib/docker/overlay2. Mais..,docker system prune -a
aurait suffi. De plus, les spécificités de ma configuration sont :OS: Ubuntu 20
,Docker : 19.03.12