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 l'info 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 système?
D'après les suggestions de Kal:
Lorsque je me suis débarrassé de toutes les images et conteneurs, cela a libéré de l'espace et la construction de l'image a fonctionné plus longtemps avant d'échouer avec la même erreur. La question est donc de savoir de quel espace s'agit-il et comment le configurer?
df -ih
Réponses:
J'ai eu la même erreur et je l'ai résolu de cette façon:
1 . Supprimez les volumes orphelins dans Docker, vous pouvez utiliser la commande intégrée de volume docker. La commande intégrée supprime également tout répertoire dans / var / lib / docker / volumes qui n'est pas un volume, alors assurez-vous de ne rien y avoir à enregistrer.
Attention, soyez très prudent si vous avez des données à conserver
Nettoyer:
Commandes supplémentaires:
Liste des volumes pendants:
Liste tous les volumes:
2. Pensez également à supprimer toutes les images inutilisées.
Débarrassez-vous d'abord des
<none>
images (celles-ci sont parfois générées lors de la construction d'une image et si pour une raison quelconque la construction de l'image a été interrompue, elles y restent).voici un joli script que j'utilise pour les supprimer
Ensuite, si vous utilisez Docker Compose pour créer des images localement pour chaque projet. Vous vous retrouverez avec beaucoup d'images généralement nommées comme votre dossier (exemple si votre dossier de projet nommé Bonjour, vous trouverez le nom des images
Hello_blablabla
). alors pensez aussi à supprimer toutes ces imagesvous pouvez modifier le script ci-dessus pour les supprimer ou les supprimer manuellement avec
docker rmi {image-name}
la source
docker images -qf dangling=true
et bien sûr les retirer avecdocker rmi $(docker images -qf dangling=true)
.MISE À JOUR
Les commandes ci-dessous sont devenues des hacks à mesure que Docker se développe. La meilleure pratique actuelle est
Cela supprimera:
Comme ci-dessous, c'est nucléaire.
Pour nettoyer votre système, retirez d'abord les conteneurs
puis supprimez les images
Ceci est bien sûr nucléaire et supprimera tous les conteneurs et toutes les images. Vous pouvez les supprimer un à la fois via
docker rm #CONTAINER_ID#
etdocker rmi #IMAGE_ID
.la source
df -ih
. Pour diagnostiquer plus chirurgicalement, entrezncdu
puis appuyez sur c pour compter le nombre de fichiers et C pour trier par nombre de fichiers pour obtenir une estimation approximative de ce qui utilise tous vos inodes. Si le problème est en effet docker, il sera immédiatement apparent par les répertoires utilisant le plus d'inodes.docker system prune
Vérifiez que vous avez de l'espace libre sur / var car c'est là que Docker stocke les fichiers image par défaut (dans / var / lib / docker).
Nettoyez d'abord les éléments en utilisant
docker ps -a
pour répertorier tous les conteneurs (y compris ceux qui sont arrêtés) etdocker rm
pour les supprimer; puis utilisezdocker images
pour répertorier toutes les images que vous avez stockées etdocker rmi
pour les supprimer.Modifiez ensuite l'emplacement de stockage avec une option -g sur le démon docker ou en modifiant
/etc/default/docker
et en ajoutant l'-g
option àDOCKER_OPTS
.-g
spécifie l'emplacement du "Docker runtime" qui est essentiellement tout ce que Docker crée lorsque vous créez des images et exécutez des conteneurs. Choisissez un emplacement avec beaucoup d'espace car l'espace disque utilisé aura tendance à augmenter avec le temps. Si vous modifiez/etc/default/docker
, vous devrez redémarrer le démon docker pour que la modification prenne effet.Vous devriez maintenant pouvoir créer une nouvelle image (ou en extraire une à partir de Docker Hub) et vous devriez voir un tas de fichiers créés dans le répertoire que vous avez spécifié avec l'option -g.
la source
docker ps -a
pour répertorier tous les conteneurs (y compris ceux sortis), puisdocker rm
pour les supprimer. Utilisezdocker images
pour répertorier toutes les images, puisdocker rmi
pour les supprimer. Espérons que cela devrait nettoyer tout (ou la plupart des choses).Comme déjà mentionné,
aide, mais avec Docker 17.06.1 et versions ultérieures sans élagage des volumes inutilisés. Depuis Docker 17.06.1, la commande suivante élague également les volumes:
Dans la documentation Docker: https://docs.docker.com/config/pruning/
Si vous souhaitez tailler des volumes et conserver des images et des conteneurs:
la source
docker volume prune
m'a aidé aujourd'hui lorsque toutes les autres solutions ici ont cessé de fonctionner.Si c'est juste une installation de test de Docker (c'est-à-dire pas de production) et que vous ne vous souciez pas de faire un nettoyage 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, pas dans un cheminement de QA ou de production sérieux. La grande chose est que si vous avez votre (vos) Dockerfile (s), c'est facile à reconstruire et ou
docker pull
.la source
docker images -a | sed '1 d' | awk '{print $3}' | xargs docker rmi -f
. La version OS X BSD dexargs
prend en charge l'-L
option, contrairement à la version de boot2docker.docker ps -a -q
etc. pour éviter les manipulations de texte, c'est-à-diredocker rm $(docker ps -a -q); docker rmi -f $(docker images -a -q)
devrait faire l'affairepour supprimer tous les conteneurs, volumes, réseaux et images inutilisés à la fois ( https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands ):
si cela ne suffit pas, on peut d'abord supprimer les conteneurs en cours d'exécution:
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? )
la source
docker system prune
ne supprime pas les volumes.docker system prune -a -f --volumes
supprimera les volumes.Docker pour Mac
Ainsi ,
docker system prune
etdocker system prune --volumes
suggéré dans d' autres réponses libéré un peu d' espace à chaque fois, mais finalement chaque fois que je courais quoi que ce soit je recevais l'erreur.Ce qui a réellement résolu le problème racine, c'était la suppression du
Docker.raw
fichier que Docker pour Mac utilise pour le stockage et son redémarrage.Pour trouver ce fichier, ouvrez Docker pour Mac et accédez à *
Sur les nouvelles versions de Docker pour Mac **, il vous montre la taille réelle de ce fichier sur le disque directement dans l'interface utilisateur, ainsi que sa taille maximale allouée. Vous verrez probablement que c'est énorme. Par exemple, sur ma machine, c'était 41 Go !
J'ai supprimé
Docker.raw
, redémarré Docker pour Mac et le fichier a été automatiquement créé à nouveau et redevenait 0 Go .Tout a continué à fonctionner comme avant , bien que j'avais bien sûr perdu mon cache Docker. Comme prévu, après avoir exécuté quelques commandes Docker, le fichier a recommencé à se remplir avec quelques Go de données, mais loin des 41 Go .
Mettre à jour
Quelques mois plus tard, je me suis de
Docker.raw
nouveau rempli à une taille similaire. Cette méthode a donc fonctionné, mais doit être répétée tous les quelques mois. Pour moi ça va.Une note sur pourquoi cela fonctionne - je dois supposer que c'est un bogue dans Docker pour Mac. Il semble vraiment que
docker system prune
/docker system prune --volumes
devrait effacer entièrement le contenu de ce fichier, mais il semble que le fichier accumule d'autres éléments qui ne peuvent pas être supprimés par ces commandes. Quoi qu'il en soit, sa suppression manuelle résout le problème!la source
Docker laisse des images pendantes qui peuvent occuper votre espace. Pour nettoyer après Docker, exécutez ce qui suit:
ou avec des versions plus anciennes de Docker:
Cela supprimera les images quittées et pendantes, ce qui, espérons-le, efface l'espace de l'appareil.
la source
docker rmi $(docker images -f "dangling=true" -q)
la source
vous pouvez aussi utiliser:
ou juste pour les volumes:
la source
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 au lieu de 750 Go. Par conséquent, lorsque vous tirez des images, j'obtiens cette erreur "pas d'espace disponible sur l'appareil". La solution est simple:
la source
J'ai également rencontré ce problème sur la machine RHEL. Je n'ai trouvé aucune solution appropriée nulle part sur la communauté stack-overflow et docker-hub. Si vous rencontrez ce problème même après la commande ci-dessous:
système docker prune --all
La solution qui a finalement fonctionné:
la source
Nettoyez Docker à l'aide de la commande suivante:
la source
Vos cgroups ont le
cpuset
contrôleur activé. Ce contrôleur est surtout utile dans un environnement NUMA où il permet de spécifier finement quelle CPU / banque de mémoire vos tâches sont autorisées à exécuter.Par défaut, les champs obligatoires
cpuset.mems
etcpuset.cpus
ne sont pas définis, ce qui signifie qu'il n'y a "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 êtreIl demandera essentiellement au système d'initialiser automatiquement le conteneur
cpuset.mems
et àcpuset.cpus
partir de son groupe de contrôle parent.la source
echo 0 > /sys/fs/cgroup/cpuset/system.slice/cpuset.mems
Si vous utilisez l'image boot2docker via Docker Toolkit, le problème vient du fait que la machine virtuelle boot2docker est à court d'espace.
Lorsque vous faites une
docker import
ou ajoutez une nouvelle image, l'image est copiée dans celle/mnt/sda1
qui pourrait être pleine.Une façon de vérifier l'espace dont vous disposez dans l'image est de ssh dans le vm et d'exécuter
df -h
et de vérifier l'espace restant dans / mnt / sda1La 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 soit nettoyer selon les instructions de certaines des réponses à cette question, soit choisir de redimensionner l'image boot2docker elle-même, en augmentant l'espace sur
/mnt/sda1
Vous pouvez suivre les instructions ici pour effectuer le redimensionnement de l'image https://gist.github.com/joost/a7cfa7b741d9d39c1307
la source
Si vous utilisez Docker Desktop, vous pouvez augmenter la taille de l'image du disque dans les paramètres avancés en accédant aux préférences de Docker .
Voici la capture d'écran de macOS:
la source
Cela peut être dû à l'espace de stockage par défaut défini sur 40 Go (chemin par défaut, / var / lib / docker)
vous pouvez modifier le volume de stockage pour pointer vers un chemin différent
DOCKER_STORAGE_OPTIONS = '- storage-driver = overlay --graph = CUSTOM_PATH'
si vous exécutez la commande docker info (elle devrait afficher le pilote de stockage en superposition)
la source
Il semble qu'il y ait plusieurs façons dont cela peut se produire. Le problème que j'avais était que l'image du disque Docker avait atteint sa taille maximale (Docker Whale -> Préférences -> Disque si vous voulez voir quelle taille est dans OSX).
J'ai augmenté la limite et j'étais prêt à partir. Je suis sûr que le nettoyage des images inutilisées fonctionnerait également.
la source
J'exécute les commandes ci-dessous.
Il n'est pas nécessaire de reconstruire les images par la suite.
Ceux-ci enlèvent les conteneurs sortis / pendants et les volumes pendants.
la source
Pour moi a
docker system prune
fait l'affaire. Je lance mac os.la source
docker volume ls
ne renvoyait rien, il semblait donc que le stockage était principalement utilisé par les caches et les images pendantes.Cela a fonctionné pour moi
semble être une meilleure option avec la dernière version
la source