Pourquoi docker image mange mon espace disque qui n'est pas utilisé par docker

j'ai setup docker et j'ai utilisé un périphérique de bloc complètement différent pour stocker les données du système de docker:

[root@blink1 /]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker

other_args="-H tcp://0.0.0.0:9367 -H unix:///var/run/docker.sock -g /disk1/docker"

Notez que /disk/1 utilise un disque dur complètement différent /dev/xvdi

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  5.1G  2.6G  67% /
devtmpfs        1.9G  108K  1.9G   1% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/xvdi        20G  5.3G   15G  27% /disk1
/dev/dm-1       9.8G  1.7G  7.6G  18% /disk1/docker/devicemapper/mnt/bb6c540bae25aaf01aedf56ff61ffed8c6ae41aa9bd06122d440c6053e3486bf
/dev/dm-2       9.8G  1.7G  7.7G  18% /disk1/docker/devicemapper/mnt/c85f756c59a5e1d260c3cdb473f3f4d9e55ac568967abe190eeaf9c4087afeac

le problème est que lorsque je continue de télécharger des images docker et de lancer des conteneurs docker, il semble que l'autre disque dur /dev/xvda1 est également utilisé.

je peux vérifier ce problème en supprimant certains docker images. Après que j'ai enlevé quelques images docker,/dev/xvda1 a un peu plus d'espace maintenant.

est-ce que je rate quelque chose?

Mon menu fixe version:

[root@blink1 /]# docker info
Containers: 2
Images: 42
Storage Driver: devicemapper
 Pool Name: docker-202:1-275421-pool
 Pool Blocksize: 64 Kb
 Data file: /disk1/docker/devicemapper/devicemapper/data
 Metadata file: /disk1/docker/devicemapper/devicemapper/metadata
 Data Space Used: 3054.4 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 4.7 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.14.20-20.44.amzn1.x86_64
Operating System: Amazon Linux AMI 2014.09
43
demandé sur gtonic 2015-01-09 06:54:34

6 réponses

c'est un problème de noyau avec devicemapper, qui affecte la famille RedHat D'OS (RedHat, Fedora, CentOS, et Amazon Linux). Les conteneurs supprimés ne libèrent pas l'espace disque cartographié. Cela signifie que sur L'OSs affecté vous allez lentement manquer de place que vous commencez et redémarrez des conteneurs.

Le projet Docker en est conscient, et le noyau est censé être fixé en amont (https://github.com/docker/docker/issues/3182).

Un travail autour de toutes sortes est à donner à Docker son propre volume pour écrire ("Quand Docker mange de l'espace disque"). Cela ne l'empêche pas de manger de l'espace, juste de détruire d'autres parties de votre système après qu'il le fasse.

ma solution a été de désinstaller docker, puis de supprimer tous ses fichiers, puis de réinstaller:

sudo yum remove docker
sudo rm -rf /var/lib/docker
sudo yum install docker

ceci m'a permis de récupérer mon espace, mais ce n'est pas très différent du lancement d'une instance de remplacement. Je n'ai pas trouvé une meilleure solution.

42
répondu Nathaniel Waisbrot 2015-01-12 02:53:24

Supprimer mon fichier /var/lib/docker ne me convient pas. Ceux-ci sont un des moyens plus sûrs:

Solution 1:

les commandes suivantes du numéro me dégagent de l'espace et c'est beaucoup plus sûr que de supprimer /var/lib/docker

Avant:

> docker info
Metadata file: 
Data Space Used: 53.38 GB
Data Space Total: 53.39 GB
Data Space Available: 8.389 MB
Metadata Space Used: 6.234 MB
Metadata Space Total: 54.53 MB
Metadata Space Available: 48.29 MB

commande dans les versions plus récentes de Docker par exemple 17.x +

> docker system prune -a

(Il montre le Total des récupérée de " l'espace)

commandes dans les versions plus anciennes de Docker par exemple 1.13.x (exécuter en tant que root pas de sudo):

# Delete 'exited' containers
docker rm -v $(docker ps -a -q -f status=exited)

# Delete 'dangling' images (If there are no images you will get a docker: "rmi" requires a minimum of 1 argument)
docker rmi $(docker images -f "dangling=true" -q)

# Delete 'dangling' volumes (If there are no images you will get a docker: "volume rm" requires a minimum of 1 argument)
docker volume rm $(docker volume ls -qf dangling=true)

Après :

> docker info
Metadata file: 
Data Space Used: 1.43 GB
Data Space Total: 53.39 GB
Data Space Available: 51.96 GB
Metadata Space Used: 577.5 kB
Metadata Space Total: 54.53 MB
Metadata Space Available: 53.95 MB

Solution 2:

avec ceci, assurez-vous que vos programmes à l'intérieur du conteneur docker n'écrivent pas beaucoup / d'énormes fichiers dans le fichier système.

Vérifiez la taille d'utilisation de l'espace de votre processus Docker en cours d'exécution

docker ps -s #may take minutes to return

ou pour tous les contenants, même sortis de

docker ps -as #may take minutes to return

Vous pouvez ensuite supprimer la délinquance conteneur/s

docker rm <CONTAINER ID>

trouver le coupable possible qui pourrait utiliser des gigs d'espace

docker exec -it <CONTAINER ID> "/bin/sh"
du -h

dans mon cas, le programme écrivait des gigs de fichiers temporaires.

(Nathaniel Waisbrot mentionné dans la réponse acceptée ceci problème et j'ai eu quelques infos de la question)

22
répondu rjdkolb 2018-07-27 06:00:34

j'ai eu un problème similaire et je pense que cela arrive quand vous n'avez pas assez d'espace dans le disque pour toutes vos images docker. J'avais 6 Go réservés pour Docker images qui il s'est avéré ne pas être assez dans mon cas. Quoi qu'il en soit, j'avais enlevé chaque image et chaque conteneur et encore disque semblait plein. La plus grande partie de l'espace était utilisée par /var/lib/docker/devicemapper et /var/lib/docker/tmp.

Cette commande ne fonctionne pas pour moi:

# docker ps -qa | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/

D'abord, j'ai arrêté le panneau de service:

sudo service docker stop

Ensuite, j'ai supprimé le fichier /var/lib/menu fixe:

Alors j'ai fait ce que quelqu'un a suggéré ici https://github.com/docker/docker/issues/18867#issuecomment-232301073

  • Supprimer l'instance existante de panneau métadonnées rm-rf /var/lib/menu fixe

    sudo rm-rf / var/lib / docker

  • passer les options suivantes au démon docker: - s devicemapper --storage-opt dm.fs=xfs --stockage-opt dm.mountopt=jeter

  • Démarrer le démon docker.

Pour les deux dernières étapes, je lance:

sudo dockerd -s devicemapper --storage-opt dm.fs=xfs --storage-opt dm.mountopt=discard
3
répondu rodolk 2017-04-06 18:40:00

tel que mentionné dans le numéro #18867 - Supprimer des données dans un conteneur devicemapper ne peut pas libérer de l'espace utilisé à partir de Github.com

essayez d'exécuter la commande suivante:

# docker ps -qa | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/

Il utilise le fstrim outil pour couper le disque finement fourni devicemapper.

3
répondu Jiang Jun 2017-09-14 11:49:45

Déplacer / var/llib / docker répertoire.

en supposant que le répertoire / root a assez de place, si non, remplacez celui qui en a,

sudo systemctl stop docker

mv /usr/lib/docker /root


ln -s /root/docker /var/lib/docker

systemctl start docker

De cette façon, vous n'avez pas à reconfigurer docker.

2
répondu Ajay Sharma 2017-09-14 19:28:46

Oui, Docker utilisation /var/lib/docker dossier pour stocker les couches. Il y a des moyens de récupérer l'espace et de déplacer le stockage dans un autre répertoire.

vous pouvez monter un plus grand espace disque et déplacer le contenu de /var/lib/docker vers la nouvelle position de montage et faire le lien sym.

il y a des explications détaillées sur la façon de faire la tâche ci-dessus.

http://www.scmtechblog.net/2016/06/clean-up-docker-images-from-local-to.html

Vous pouvez enlever les couches intermédiaires.

https://github.com/vishalvsh1/docker-image-cleanup

0
répondu vishal sahasrabuddhe 2016-06-29 16:53:27