Résolution des problèmes liés à API error (500): devmapper de Docker dans Amazon ECS - Amazon Elastic Container Service

Résolution des problèmes liés à API error (500): devmapper de Docker dans 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, les AMI optimisées pour Amazon ECS à partir de la version 2015.09.d sont lancées avec un volume de 8 Gio pour le système d'exploitation attaché à l'emplacement /dev/xvda et montées 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 AMI Amazon Linux optimisée pour Amazon ECS.

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
  • (Agent de conteneur Amazon ECS 1.8.0 et version ultérieure) Vous pouvez réduire la durée pendant laquelle les conteneurs arrêtés ou fermés 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 la valeur est trop basse, il est possible que vous ne puissiez pas examiner les conteneurs arrêtés ou afficher les journaux avant leur suppression. Pour de plus amples informations, consultez Configuration de l'agent de conteneur Amazon ECS.

  • Vous pouvez supprimer les conteneurs qui ne sont pas en cours d’exécution et les images inutilisées de vos instances de conteneurs. 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/"