web-dev-qa-db-fra.com

Erreur Docker: pas d’espace libre sur le périphérique

J'ai installé docker sur une machine Debian 7 de la manière suivante 

$ echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
$ Sudo apt-get update
$ curl -sSL https://get.docker.com/ubuntu/ | Sudo sh

Après cela, lorsque j'ai essayé de créer une image, cela a échoué avec l'erreur suivante

 time="2015-06-02T14:26:37-04:00" level=info msg="[8] System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1bdaec2630197fa4da1b19cc3db7e3d3883/cgroup.procs: no space left on device"

Voici les infos sur le docker 

Containers: 2
Images: 21
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 25
Dirperm1 Supported: true
Execution Driver: native-0.2
Kernel Version: 3.16.0-0.bpo.4-AMD64
Operating System: Debian GNU/Linux 7 (wheezy)
CPUs: 2
 Total Memory: 15.7 GiB


WARNING: No memory limit support
 WARNING: No swap limit support

Comment puis-je augmenter la mémoire? Où sont stockées les configurations du système?

Parmi les suggestions de Kal:

Lorsque je me suis débarrassé de toutes les images et de tous les conteneurs, cela a libéré de l'espace et la génération d'images a duré plus longtemps avant d'échouer avec la même erreur. La question est donc de savoir à quel espace cela fait référence et comment le configurer?

192
user_mda

J'ai eu la même erreur et le résoudre de cette façon:

1 . Supprimez les volumes orphelins dans Docker, vous pouvez utiliser la commande de volume intégrée dans le menu fixe. La commande intégrée supprime également tout répertoire de/var/lib/docker/volumes qui n'est pas un volume. Assurez-vous de ne rien mettre dedans que vous souhaitez enregistrer.

Attention, soyez très prudent si vous souhaitez conserver certaines données.

Nettoyer:

$ docker volume rm $(docker volume ls -qf dangling=true)

Commandes supplémentaires:

Liste des volumes suspendus:

$ docker volume ls -qf dangling=true

Répertoriez tous les volumes:

$ docker volume ls

2 Pensez également à supprimer toutes les images inutilisées.

Commencez par supprimer les images <none> (celles-ci sont parfois générées lors de la création d’une image et si, pour une raison quelconque, la construction de l’image a été interrompue, elles y restent).

voici un bon script que j'utilise pour les supprimer 

docker rmi $(docker images | grep '^<none>' | awk '{print $3}')

Ensuite, si vous utilisez Docker Compose pour générer des images localement pour chaque projet. Vous allez vous retrouver avec un grand nombre d'images généralement nommées comme votre dossier (par exemple, si votre dossier de projet s'appelle Bonjour, vous trouverez le nom d'images Hello_blablabla). alors aussi envisager de supprimer toutes ces images

vous pouvez éditer le script ci-dessus pour les supprimer ou les supprimer manuellement avec 

docker rmi {image-name}

229
Mahmoud Zalt

METTRE &AGRAVE; JOUR
Les commandes ci-dessous sont devenues des hacks à mesure que Docker devenait plus développé. La meilleure pratique actuelle est

docker system Prune

Cela supprimera:

- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all dangling images

Comme ci-dessous, c'est nucléaire. 


Pour nettoyer votre système, commencez par retirer les conteneurs.

$ docker rm $(docker ps -aq)

puis supprimez les images

$ docker rmi $(docker images -q)

Ceci est bien sûr nucléaire et supprimera tous les conteneurs et toutes les images. Vous pouvez les supprimer un par un via docker rm #CONTAINER_ID# et docker rmi #IMAGE_ID

163
Joshua Cook

Vérifiez que vous avez suffisamment d’espace libre sur/var car Docker stocke les fichiers d’image par défaut (dans/var/lib/docker).

Commencez par nettoyer en utilisant docker ps -a pour répertorier tous les conteneurs (y compris les conteneurs arrêtés) et docker rm pour les supprimer; utilisez ensuite docker images pour répertorier toutes les images que vous avez stockées et docker rmi pour les supprimer.

Ensuite, changez l'emplacement de stockage avec une option -g sur le démon docker ou en modifiant /etc/default/docker et en ajoutant l'option -g à DOCKER_OPTS. -g spécifie l'emplacement du "runtime Docker", qui correspond en gros à tout ce que Docker crée lorsque vous créez des images et exécutez des conteneurs. Choisissez un emplacement offrant beaucoup d'espace, car l'espace disque utilisé aura tendance à augmenter avec le temps. Si vous éditez /etc/default/docker, vous devrez redémarrer le démon docker pour que la modification soit prise en compte. 

Vous devriez maintenant pouvoir créer une nouvelle image (ou en extraire une à partir de Docker Hub) et voir un tas de fichiers se créer dans le répertoire que vous avez spécifié avec l'option -g.

64
Kal

S'il ne s'agit que d'une installation test de Docker (c'est-à-dire non de production) et que vous ne vous souciez pas de nettoyer le nucléaire, vous pouvez:

nettoyer tous les conteneurs: docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm

nettoyer toutes les images: docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f

Encore une fois, je l’utilise dans mes instances ec2 lors du développement de Docker, et non dans un processus d’assurance qualité ou de production sérieux. L’avantage, c’est que si vous avez votre/vos fichier (s) Docker, il est facile de le reconstruire et/ou docker pull.

27
James

Docker laisse des images pendantes qui peuvent prendre de la place. Pour nettoyer après Docker, exécutez ce qui suit:

docker image Prune [-af if you want to force remove all images]

ou avec les anciennes versions de Docker:

docker rm $(docker ps -q -f 'status=exited')
docker rmi $(docker images -q -f "dangling=true")

Cela supprimera les images obsolètes et suspendues, ce qui, espérons-le, efface l'espace des périphériques.

11
punkrockpolly

Nettoyez Docker en utilisant la commande suivante:

docker images --no-trunc | grep '<none>' | awk '{ print $3 }' \
| xargs docker rmi
6
Ashok Waghmare

Le contrôleur cpuset est activé dans vos groupes de contrôle. Ce contrôleur est surtout utile dans un environnement NUMA, dans lequel il permet de spécifier avec précision la banque de mémoire/processeur que vos tâches sont autorisées à exécuter.

Par défaut, les cpuset.mems et cpuset.cpus obligatoires ne sont pas définis, ce qui signifie qu'il ne reste "plus d'espace" pour votre tâche, d'où l'erreur.

Le moyen le plus simple de résoudre ce problème consiste à activer cgroup.clone_children à 1 dans le groupe de contrôle racine. Dans votre cas, il devrait être 

echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children

En gros, il demandera au système d’initialiser automatiquement les cpuset.mems et cpuset.cpus du conteneur à partir de son groupe de contrôle parent.

5
yadutaf
  1. Nettoyer les images pendantes docker rmi $(docker images -f "dangling=true" -q)
  2. Supprimer les volumes indésirables
  3. Supprimer les images inutilisées
  4. Supprimer les conteneurs non utilisés
5
josepainumkal

vous pouvez aussi utiliser:

docker system Prune

ou seulement pour les volumes:

docker volume Prune
5
alexanoid

pour supprimer tous les conteneurs, volumes, réseaux et images non utilisés simultanément ( https://docs.docker.com/engine/reference/commandline/system_Prune/#related-commands ):

docker system Prune -a -f

si cela ne suffit pas, on peut d'abord supprimer les conteneurs en cours d'exécution:

docker rm -f $(docker ps -a -q)
docker system Prune -a -f

augmenter/var/lib/docker ou utiliser un autre emplacement avec plus d’espace est également une bonne alternative pour se débarrasser de cette erreur (voir Comment changer le répertoire d’installation de l’image docker? )

5
Guillaume

Comme déjà mentionné,

docker system Prune

aide, mais avec Docker 17.06.1 et versions ultérieures sans élaguer les volumes inutilisés. Depuis Docker 17.06.1, la commande suivante supprime également les volumes:

docker system Prune --volumes

Dans la documentation Docker: https://docs.docker.com/config/pruning/

La commande Élagage du système Docker est un raccourci permettant d'élaguer les images, les conteneurs et les réseaux. Dans Docker 17.06.0 et les versions antérieures, les volumes sont également élagués. Dans Docker 17.06.1 et les versions ultérieures, vous devez spécifier le drapeau --volumes pour les volumes Prune à Prune du système Docker.

Si vous souhaitez supprimer des volumes et conserver des images et des conteneurs:

docker volume Prune
3
RoBeaToZ

J'ai également rencontré ce problème sur la machine RHEL. Je n'ai trouvé aucune solution appropriée sur la pile de débordement et la communauté docker-hub. Si vous faites face à ce problème même après la commande ci-dessous:

système de docker Prune --all

La solution qui a finalement fonctionné:

  1. informations sur le docker
    • Pour vérifier le pilote de stockage actuel du menu fixe
    • Le mien était: Driver de stockage: devicemapper; Si vous avez un pilote de stockage en superposition2, ne vous inquiétez pas. La solution fonctionnera toujours pour vous.
  2. df -h
    • Ceci permet de vérifier les systèmes de fichiers disponibles sur la machine et le chemin où ils sont montés. Deux chemin monté pour avoir une note:
    • / dev/mapper/rootvg-var 7.6G 1.2G 6.1G 16%/var
    • / dev/mapper/rootvg-apps 60G 9.2G 48G 17%/apps
    • Remarque - Par défaut, le chemin de stockage du menu fixe est/var/lib/docker. Il dispose d’un espace disponible d’environ 6 Go, d’où l’ensemble des problèmes d’espace. Donc, fondamentalement, je dois déplacer le stockage par défaut vers un autre stockage où l'espace disponible est plus important. Pour moi, son chemin d'accès sysyem File '/ dev/mapper/rootvg-apps' qui est monté sur/apps. Maintenant, la tâche consiste à déplacer/var/lib/docker vers quelque chose comme/apps/newdocker/docker.
  3. mkdir/apps/newdocker/docker
  4. chmod -R 777/apps/newdocker/docker
  5. Mettez à jour le fichier docker.serive sur Linux qui se trouve sous: /usr/lib/systemd/system
    • vi /usr/lib/systemd/system/docker.service
  6. si périphérique de stockage est devicemapper, commentez la ligne ExecStart existante et ajoutez ci-dessous sous [Service]:
    • ExecStart =
    • ExecStart =/usr/bin/dockerd -s devicemapper --storage-opt dm.fs = xfs --storage-opt dm.basesize = 40 Go -g/apps/newdocker/docker --exec-opt native.cgroupdriver = cgroupfs
  7. Ou si le périphérique de stockage est superposé2:
    • ajoutez simplement -g/apps/newdocker/docker dans l’instruction ExexStart existante.
    • Quelque chose comme ExecStart =/usr/bin/dockerd -g/apps/newdocker/docker -H fd: // --containerd =/run/containerd/containerd.sock
  8. rm -rf/var/lib/docker (toutes les données existantes du docker seront supprimées)
  9. systemctl stop docker
  10. ps aux | grep -i docker | grep -v grep
    • Si aucune sortie n'a été produite par la commande ci-dessus, rechargez le démon systemd à l'aide de la commande ci-dessous.
  11. systemctl daemon-reload
  12. docker de démarrage systemctl
  13. informations sur le docker
    • Vérifiez l'espace de données disponible: 62,15 Go après l'installation du menu fixe dans le nouveau système de fichiers.
  14. TERMINÉ
2
Mayank Chaudhary

Si vous utilisez l'image boot2docker via Docker Toolkit, le problème provient du fait que la machine virtuelle boot2docker est saturée. 

Lorsque vous créez un docker import ou ajoutez une nouvelle image, celle-ci est copiée dans le /mnt/sda1 qui est peut-être devenu saturé.

Une façon de vérifier l’espace disponible dans l’image consiste à ssh dans la machine virtuelle, à exécuter df -h et à vérifier l’espace restant dans/mnt/sda1.

La commande ssh est docker-machine ssh default

Une fois que vous êtes sûr qu'il s'agit bien d'un problème d'espace, vous pouvez nettoyer en suivant les instructions de certaines des réponses à cette question ou choisir de redimensionner l'image de boot2docker elle-même en augmentant l'espace disponible sur /mnt/sda1

Vous pouvez suivre les instructions ici pour redimensionner l’image https://Gist.github.com/joost/a7cfa7b741d9d39c1307

1
Nerrve

On dirait que cela peut se produire de plusieurs manières. Le problème que j’avais était que l’image de disque du menu fixe avait atteint sa taille maximale (Docker Whale -> Préférences -> Disque si vous souhaitez voir quelle taille correspond à OSX). 

J'ai augmenté la limite et j'étais prêt à partir. Je suis sûr que le nettoyage des images non utilisées fonctionnerait également.

1
SnellyBigoda

Dans mon cas, l'installation d'ubuntu-server 18.04.1 [pour une raison étrange] a créé un volume logique LVM avec seulement 4 Go de taille au lieu de 750 Go . Par conséquent, lors de l'extraction des images, l'erreur "aucun espace laissé sur le périphérique" . Le correctif est simple:

lvextend -l 100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
0
Kostyantyn