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
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.
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)
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
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.
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.
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.