Dans le processus d'utilisation de Docker, nous devons parfois partager des images et des conteneurs Docker entre différentes machines. Un moyen simple consiste à regrouper ces images et conteneurs dans des fichiers tar, puis à les transférer vers la machine cible via le réseau, puis à les décompresser et à les charger dans Docker. Cependant, même si nous réussissons à transférer ces images et conteneurs vers la machine cible, nous rencontrons souvent le problème suivant : impossible de charger l'image ou de démarrer le conteneur, ce qui indique "aucun espace disponible sur le périphérique", c'est-à-dire que l'espace disque de la partition est épuisé. insuffisant, en particulier lorsque ce problème est plus susceptible de se produire lors de l'utilisation de la superposition de pilotes de stockage2.
Que diable se passe-t-il ? J'ai déjà rencontré un problème similaire. Après quelques investigations et recherches, j'ai trouvé les raisons et les solutions :
Les pilotes de stockage de Docker incluent AUFS, DeviceMapper et OverlayFS Parmi eux, Que se passe-t-il lorsque Docker ne parvient pas à partager le disque dur ? est le plus populaire. un. Il est basé sur le système de fichiers overlayFS, superposant plusieurs systèmes de fichiers en miroir pour former un point de montage commun, le faisant ressembler à un système de fichiers complet, comme le montre la figure ci-dessous :
Comme le montre la figure, le la partie bleue est le système de fichiers de l'image de base, la partie verte est le système de fichiers de la couche conteneur et la partie rouge est le système de fichiers de la couche en lecture seule. La couche en lecture seule contient le système de fichiers commun à toutes les images. La couche conteneur est le système de fichiers de chaque conteneur. Elle crée une couche en lecture seule pour chaque conteneur et ajoute une couche inscriptible par-dessus afin que chaque conteneur puisse voir. Il s'agit d'un système de fichiers indépendant et n'interfère pas les uns avec les autres.
Lorsque nous créons un conteneur Docker, le pilote de stockage Que se passe-t-il lorsque Docker ne parvient pas à partager le disque dur ? créera un sous-répertoire indépendant pour chaque conteneur dans le répertoire /var/lib/docker/Que se passe-t-il lorsque Docker ne parvient pas à partager le disque dur ? pour stocker le système de fichiers du conteneur. Les données de fichier de ces sous-répertoires sont toutes stockées dans l'image de base, leur taille n'affecte donc pas les performances du pilote de stockage. Cependant, lorsque nous empaquetons l'image Docker et le conteneur d'une machine et les envoyons à une autre machine, lorsque le pilote de stockage Que se passe-t-il lorsque Docker ne parvient pas à partager le disque dur ? décompresse les données, il les décompresse dans le répertoire /var/lib/docker, ce qui donne ce répertoire L'espace fichier occupé est trop grand et l'espace disque de la partition où se trouve /var/lib/docker est également devenu plus petit en conséquence. La figure suivante prend le répertoire /var/lib/docker comme exemple pour refléter ce problème :
.Dans cette image, la taille du disque de partition /dev/vda1 est de 50 Go et la taille du disque de partition /var/lib/docker est de 21 Go. Cependant, comme il y a trop de conteneurs créés par docker, l'espace est insuffisant dans le /var. /lib/docker. Il ne reste que 30,72 Mo. Par conséquent, lorsque nous souhaitons démarrer le conteneur à partir d'une telle machine avec un espace disque limité, il y aura un problème d'échec de démarrage.
3.1 Augmenter l'espace disque de la partition
C'est la méthode la plus courante pour les machines virtuelles, nous pouvons augmenter la taille de la partition du disque dans l'outil de gestion de machine virtuelle. redémarrez la machine virtuelle. Pour les serveurs cloud, la plupart des plates-formes cloud offrent la fonction d'extension de disque en ligne, mais le processus de fonctionnement est relativement compliqué et nécessite de la prudence pour éviter la perte de données.
3.2 Montez le répertoire /var/lib/docker sur un disque de données plus grand
Préparez un disque de plus de 21 Go (comme 20T) à l'avance et formatez-le au format ext4, montez-le dans le répertoire /data, puis / Le répertoire var/lib/docker est migré vers le disque de données pour le stockage. Les instructions de fonctionnement spécifiques sont les suivantes :
# 制作文件系统格式 mkfs.ext4 /dev/vdb # 挂载 mount /dev/vdb /data # 备份原/var/lib/docker目录下所有数据 cp -au /var/lib/docker/* /data/ # 卸载/var/lib/docker目录 umount /var/lib/docker # 将/var/lib/docker目录迁移到新的数据盘中 echo '/dev/vdb /var/lib/docker ext4 defaults 0 0' >> /etc/fstab mount -a
3.3 Supprimer les images Docker et les conteneurs qui ne sont plus utilisés
Nous pouvons utiliser la commande suivante pour nettoyer l'espace disque :
# 清理所有停止的容器 docker container prune # 清理所有未被标记的镜像 docker image prune -a # 删除所有没有容器使用的镜像 docker image prune -a --filter "dangling=true"
Résumé
Lors de l'utilisation de Docker, nous devons toujours payer Faites attention à savoir si l'espace utilisé par le pilote de stockage est suffisant, sinon cela pourrait entraîner un échec de démarrage. Pour ce faire, vous pouvez utiliser l'une des trois solutions ci-dessus. Je recommande personnellement la deuxième méthode, qui peut résoudre rapidement le problème sans détruire le système de fichiers d'origine. J'espère que mon partage pourra vous être utile, merci d'avoir lu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!