Résoudre les problèmes liés au Docker dans API error (500): devmapper Amazon ECS - Amazon Elastic Container Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Résoudre les problèmes liés au Docker dans API error (500): devmapper Amazon ECS

L'erreur Docker suivante indique que le stockage par groupe mince sur votre instance de conteneur est saturé et que le démon Docker ne peut pas créer de nouveaux conteneurs :

CannotCreateContainerError: API error (500): devmapper: Thin Pool has 4350 free data blocks which is less than minimum required 4454 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

Par défaut, Amazon Linux optimisé pour Amazon ECS, AMIs à partir des versions 2015.09.d et versions ultérieures, est lancé avec un volume de 8 Go pour le système d'exploitation connecté /dev/xvda et monté en tant que racine du système de fichiers. Un volume supplémentaire de 22 Gio est attaché à /dev/xvdcz, qui est utilisé par Docker pour le stockage des métadonnées et des images. Si cet espace de stockage est saturé, le démon Docker ne peut pas créer de nouveaux conteneurs.

La manière la plus simple d'ajouter du stockage à vos instances de conteneur est de résilier les instances existantes et d'en lancer de nouvelles avec de plus grands volumes de stockage de données. Toutefois, si vous ne pouvez pas procéder de cette façon, vous pouvez ajouter du stockage au groupe de volumes utilisé par Docker et étendre son volume logique en suivant les procédures indiquées dans Linux optimisé pour Amazon ECS AMIs.

Si votre stockage d'instance de conteneur se remplit trop vite, vous pouvez limiter cela de la façon suivante :

  • Pour afficher les informations par groupe mince, exécutez la commande suivante sur votre instance de conteneur :

    docker info
  • (Amazon ECS container agent 1.8.0 et versions ultérieures) Vous pouvez réduire le temps pendant lequel les conteneurs arrêtés ou sortis restent sur vos instances de conteneur. La variable de configuration de l'agent ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION définit la durée d'attente entre l'arrêt d'une tâche et la suppression du conteneur Docker (par défaut, cette valeur est de 3 heures). Cette opération supprime les données du conteneur Docker. Si cette valeur est trop faible, il se peut que vous ne puissiez pas inspecter vos conteneurs arrêtés ou consulter les journaux avant leur suppression. Pour de plus amples informations, veuillez consulter Configuration de l'agent de conteneur Amazon ECS.

  • Vous pouvez supprimer les conteneurs non actifs et les images inutilisées de vos instances de conteneur. Vous pouvez utiliser les exemples de commande suivants pour supprimer manuellement les conteneurs arrêtés et les images inutilisées. Les conteneurs supprimés ne peuvent pas être examinés par la suite et les images supprimées doivent être extraites à nouveau avant d'être utilisées pour lancer de nouveaux conteneurs.

    Pour supprimer les conteneurs qui ne sont pas en cours d'exécution, exécutez la commande suivante sur votre instance de conteneur :

    docker rm $(docker ps -aq)

    Pour supprimer les images non utilisées, exécutez la commande suivante sur votre instance de conteneur :

    docker rmi $(docker images -q)
  • Vous pouvez supprimer les blocs de données inutilisés dans les conteneurs. Vous pouvez utiliser la commande suivante pour exécuter fstrim sur un conteneur en cours d'exécution et ignorer les blocs de données inutilisés par le système de fichiers du conteneur.

    sudo sh -c "docker ps -q | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/"