web-dev-qa-db-fra.com

Docker remplissant le stockage sur macOS

(Article créé le 05 octobre 2016)

J'ai remarqué que chaque fois que j'exécute une image et la supprime, mon système ne revient pas à la quantité originale d'espace disponible.

Le cycle de vie sur lequel je travaille avec mes conteneurs est (exécuté sur un terminal mac par défaut):

> docker build ...
> docker run CONTAINER_TAG
> docker stop CONTAINER_TAG
> rm docker CONTAINER_ID
> rmi docker image_id

Les conteneurs créés à partir d'images personnalisées, exécutés à partir d'un nœud et d'un redis standard. Mon OS est OSX 10.11.6.

À la fin de la journée, je vois que je continue de perdre des Mbs. Comment puis-je faire face à ce problème?

POSTE MODIFIÉ

2020 et le problème persiste, et je pars et mets à jour à des fins d'aide communautaire.

Aujourd'hui en cours d'exécution:

  • macOS 10.13.6
  • Docker Engine 18.9.2
  • Docker Desktop Cli 2.0.0.3

Le moyen le plus simple de contourner le problème consiste à élaguer le système avec les utilitaires Docker.

docker system Prune -a --volumes
31
Franco Rabaglia

Il existe trois zones de stockage Docker qui peuvent être montées, car Docker est prudent - il n'en supprime pas automatiquement: les conteneurs sortants, les volumes de conteneurs inutilisés, les couches d'image inutilisées. Dans un environnement de développement avec beaucoup de construction et de fonctionnement, cela peut représenter beaucoup d'espace disque.

Ces trois commandes suppriment tout ce qui n'est pas utilisé:

  • docker rm $(docker ps -a -q) - supprime les conteneurs arrêtés
  • docker rmi $(docker images -f "dangling=true" -q) - supprime les calques d'image qui ne sont utilisés dans aucune image
  • docker volume rm $(docker volume ls -qf dangling=true) - supprime les volumes qui ne sont utilisés par aucun conteneur.

Ils sont sûrs à exécuter, ils ne supprimeront pas les couches d'image référencées par les images ou les volumes de données utilisés par les conteneurs. Vous pouvez les alias et/ou les placer dans un travail CRON pour nettoyer régulièrement le disque local.

17
Elton Stoneman

Docker sur Mac a un problème supplémentaire qui blesse beaucoup de gens: le fichier docker.qcow2 peut se développer hors de proportions (jusqu'à 64 Go) et ne se rétrécira jamais seul.

https://github.com/docker/for-mac/issues/371

Comme indiqué dans l'une des réponses de djs55, il est prévu de le corriger, mais ce n'est pas une solution miracle. Citation:

Le .qcow2 est exposé au VM en tant que périphérique de bloc avec une taille maximale de 64 Go. Comme de nouveaux fichiers sont créés dans le système de fichiers par des conteneurs, de nouveaux secteurs sont écrits sur le périphérique de bloc. Ces nouveaux les secteurs sont ajoutés au fichier .qcow2, ce qui augmente sa taille jusqu'à ce qu'il soit finalement entièrement alloué. Il cesse de croître lorsqu'il atteint cette taille maximale.

...

Nous espérons résoudre ce problème en plusieurs étapes: (notez que cela est encore au stade de la planification/conception, mais j'espère que cela vous donne une idée)

1) nous allons passer à un protocole de connexion qui prend en charge TRIM et implémenter le suivi des blocs libres dans un fichier de métadonnées à côté de qcow2. Nous allons créer un outil de compactage qui peut être exécuté hors ligne pour réduire le disque (un peu comme la conversion qemu-img mais sans le dd if =/dev/zero et il devrait être rapide car il saura déjà où se trouve l'espace vide )

2) nous automatiserons l'exécution de l'outil de compactage sur VM redémarre, en supposant qu'il soit assez rapide

3) nous allons passer à un compacteur en ligne (qui est un peu comme un GC dans un langage de programmation)

Nous cherchons également à rendre la taille maximale du .qcow2 configurable. Peut-être que 64 Go est trop grand pour certains environnements et qu'un plafond plus petit serait utile?

4
Gimby
docker container Prune
docker system Prune
docker image Prune
docker volume Prune
3
malex

Il convient également de mentionner que la taille du fichier de docker.qcow2 (ou Docker.raw sur High Sierra avec Apple Filesystem) peut sembler très grande (~ 64 Go), plus grande qu'elle ne l'est en réalité, lors de l'utilisation de la commande suivante:

  • ls -klsh Docker.raw

Cela peut être trompeur, car il affichera la taille logique du fichier plutôt que sa taille physique.

Pour voir la taille physique du fichier, vous pouvez utiliser cette commande:

  • du -h Docker.raw

Source: https://docs.docker.com/docker-for-mac/faqs/#disk-usage

1
Maxime

Il existe plusieurs options sur la façon de limiter l'espace disque du docker, je commencerais par limiter/faire tourner les journaux: les journaux du conteneur Docker prenant tout mon espace disque

Par exemple. si vous avez une version Docker récente, vous pouvez la démarrer avec un --log-opt max-size=50m option par conteneur. De plus, si vous avez d'anciens conteneurs inutilisés, vous pouvez envisager de consulter les journaux de docker qui se trouvent dans /var/lib/docker/containers/*/*-json.log

1
gtonic