J'ai mis à jour mon service Amazon Elastic Container Service (Amazon ECS) pour exécuter des tâches avec la dernière image, mais certaines tâches n'utilisent pas la nouvelle image. Ou bien, mes tâches Amazon ECS échouent et je reçois le message d'erreur CannotPullContainerError.
Brève description
Lorsque vous mettez à jour une image dans Amazon ECS, le message d'erreur suivant peut s'afficher :
« CannotPullContainerError: pull image manifest has been retried 1 time(s): failed to resolve ref account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: not found »
Lors de la mise à jour d’une image, vous devez également mettre à jour le service. Par défaut, Amazon ECS résout les identifications d'image de conteneur spécifiées dans la définition de tâche en résumés d'images de conteneur.
Pour un service qui exécute et gère une seule tâche, Amazon ECS utilise cette tâche afin d’établir des résumés d'images pour les conteneurs de tâches. Pour un service qui exécute et gère plusieurs tâches, Amazon ECS utilise la première tâche que le planificateur de services a démarrée lors du déploiement. Pour mettre à jour le résumé d'image en même temps que l’identification d'image dans la définition de tâche, mettez à jour le service et utilisez le paramètre Forcer le nouveau déploiement.
Pour plus d'informations sur le comportement d’image, consultez la section Résolution de l'image du conteneur.
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
S’assurer que le service utilise la dernière image
Pour vous assurer que le service utilise la dernière image, mettez à jour le service Amazon ECS, puis utilisez l'option Forcer un nouveau déploiement. Vous pouvez également exécuter la commande update-service de l'interface de ligne de commande AWS suivante :
aws ecs update-service --cluster clustername --service servicename --force-new-deployment
Remarque : Remplacez clustername par le nom de votre cluster et servicename par le nom du service.
Pour utiliser un résumé d'image spécifique, mettez à jour la définition de tâche, puis modifiez la section URI de l’image :
imageUri@imagedigest
"image": "accountid.dkr.ecr.region-name.amazonaws.com/image:latest@sha256:da04638bxxxxxxxxxx,"
Résoudre l'erreur « Image digest does not exist »
Si le message d'erreur Image digest does not exist s’affiche, vérifiez si vous avez supprimé l'image.
Pour vérifier si le résumé d'image existe dans un référentiel Amazon Elastic Container Registry (Amazon ECR), exécutez la commande describe-images :
aws ecr describe-images --repository-name repositoryname --region regionname --query 'sort_by(imageDetails,& imagePushedAt)[*]'
Remarque : Remplacez repositoryname par le nom du référentiel et regionname par votre région AWS.
La sortie de la commande affiche toutes les images du référentiel. Si le résumé de l'image n'existe pas, consultez l'historique des événements AWS CloudTrail pour l'appel d'API BatchDeleteImage afin de déterminer pourquoi l'image a été supprimée. Pour vérifier si une politique de cycle de vie Amazon ECR peut supprimer une image utilisée par une tâche en cours d'exécution, consultez CloudTrail pour l'appel d'API PolicyExecutionEvent.
Pour vous assurer qu'une identification d'image de conteneur ne change pas, il est recommandé d'activer la fonctionnalité d’immutabilité des identifications.
Remarque : L’identification de l'image de conteneur n'est pas résolue dans les services qui utilisent le contrôleur de déploiement CODE_DEPLOY ou EXTERNAL.
Pour mettre à jour le résumé de l'image, suivez les étapes décrites dans la section S’assurer que le service utilise la dernière image.
Désactiver la cohérence des versions
Il se peut que vous deviez utiliser une identification d'image de conteneur modifiable, telle que LATEST, au lieu d'une image cohérente. Pour configurer le paramètre, mettez à jour la définition de votre conteneur pour définir versionConsistency sur désactivé. Par défaut, versionConsistency est défini sur activé. Lorsque vous modifiez la valeur à Désactivé, Amazon ECS ne transforme plus l’identification d'image du conteneur en résumé. Amazon ECS utilise plutôt l'URI de l'image d'origine dans la définition du conteneur pour le déploiement.
Informations connexes
Annonce de la cohérence des versions logicielles pour les services Amazon ECS