Pourquoi Code Engine ne peut-il pas extraire une image?
Lorsque vous déployez une application Code Engine ou que vous exécutez une tâche, vous recevez un message d'erreur contenant l' Unable to pull the image.
Pour résoudre ce problème, vérifiez que l'image existe et que vous avez accès à l'image. Vérifiez que les conditions suivantes sont remplies.
-
Pour vérifier que l'image associée à votre application ou à votre tâche existe bien, consultez le message d'erreur pour obtenir des informations sur l'échec.
-
Pour déployer des applications ou exécuter des tâches dans l' Code Engine, vous devez d'abord créer une image de conteneur contenant tous les éléments d'exécution dont votre application a besoin pour fonctionner, tels que les bibliothèques d'exécution. Vous pouvez utiliser différentes méthodes pour créer l'image de conteneur, notamment en compilant votre application à partir du code source grâce à la fonctionnalité de création d'images de conteneur disponible sur Code Engine. Votre image peut être téléchargée à partir d'un registre d'images public ou privé. Pour plus d'informations sur l'accès aux registres privés, voir Ajout d'un accès à un registre de conteneur privé.
-
Si vous utilisez la commande
ibmcloud ce app create,ibmcloud ce job createouibmcloud ce jobrun submitdans l'interface de ligne de commande Code Engine, indiquez le nom de l'image utilisée pour votre application ou votre travail en utilisant le formatREGISTRY/NAMESPACE/REPOSITORY:TAGoùREGISTRYetTAGsont facultatifs. SiREGISTRYn'est pas spécifié, la valeur par défaut estdocker.io.SiTAGn'est pas spécifié, la valeur par défaut estlatest. Consultez ces commandes pour plus d'informations sur le format à utiliser pour spécifier le registre d'images.
Essayez les solutions suivantes pour résoudre votre problème.
-
Vous n'êtes pas autorisé. Si vous ne disposez pas des autorisations nécessaires pour accéder à l'image mentionnée, la création de l'application ne peut pas aboutir et une erreur se produit. Vous recevez un message d'erreur contenant
Unable to pull.-
Pour confirmer que vous pouvez accéder à l'image référencée, vérifiez l'emplacement de votre image et assurez-vous que vous disposez des droits d'accès à l'image.
-
Vérifiez que vous avez ajouté un accès de registre à Code Engine et que vous utilisez le secret de registre correct, si l'image se trouve dans un registre d'images de conteneur, tel que Docker Hub ou IBM Cloud® Container Registry. Pour plus d'informations sur l'utilisation d'images dans un registre d'images de conteneur, voir Ajout d'un accès à un registre de conteneur privé.
-
-
Le quota du registre de conteneur est dépassé.
- Recherchez une erreur
ImagePullBackOffen exécutant la commandeibmcloud ce jobrun events --jobrun JOBRUN_NAME; par exemple,
ibmcloud ce jobrun events --jobrun myjobrun- Si l'erreur figurant dans les événements système ressemble au message suivant, cela signifie que le quota du registre a été dépassé. Envisagez de mettre à niveau votre plan. Pour plus d'informations sur les plans de service et les limites de quota IBM Cloud® Container Registry, voir A propos de IBM Cloud Container Registry.
403 Forbidden - Server message: denied: You have exceeded your pull traffic quota for the current month. Review your pull traffic quota and pricing plan. - Recherchez une erreur
-
Le registre de conteneur doit être authentifié.
- Si l'erreur figurant dans les événements système ressemble au message suivant, cela signifie que l'accès au registre n'est pas autorisé ou qu'il nécessite une autorisation. Vérifiez que vos identifiants disposent des droits d'accès appropriés au registre.
Failed to pull image "<image_name>": rpc error: code = Unknown desc = failed to pull and unpack image "<image_name:image_tag>": failed to resolve reference <image_name:image_tag>": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed. -
Code Engine ne trouve pas votre image dans votre registre de conteneur.
Dans ce scénario, votre image existe et l'accès au registre fonctionne, mais Code Engine trouve une image différente de celle qu'il attendait pour une révision d'application spécifique. Le prétraitement de l'image du registre de conteneur ne correspond pas au prétraitement attendu de l'image pour une révision d'application.
Lorsque vous déployez votre application ou une nouvelle version de celle-ci, la dernière version de l'image de conteneur à laquelle vous faites référence est téléchargée et déployée, sauf si une balise est spécifiée pour cette image. Si une balise est spécifiée pour l'image, l'image balisée est utilisée pour le déploiement.
Si vous créez une version plus récente de l'image avec la même balise que l'image d'origine référencée par votre application, l'image d'origine est remplacée dans le registre de conteneur. Toutefois, Code Engine ne parvient pas à trouver cette image plus récente car l'image plus récente possède un prétraitement différent de celui de la révision d'application. L'image associée à votre révision d'application spécifique possède un résumé de registre de conteneur unique et Code Engine utilise ce résumé pour la durée de vie de votre révision d'application.
Si vous créez une version plus récente d'une image avec la même balise que l'image d'origine, l'image d'origine est remplacée dans le registre de conteneur et devient non balisée. L'image la plus récente est balisée, et cette image plus récente a un résumé différent. Votre application Code Engine n'utilise pas cette image plus récente car celle-ci possède un prétraitement différent de celui de l'image référencée par la révision d'application. Code Engine peut toujours créer de nouvelles instances de la révision d'application si l'image référencée à l'origine existe toujours. Si l'image référencée à l'origine par votre application n'existe pas, Code Engine ne trouve pas le résumé d'image attendu et l'application échoue car elle ne peut pas extraire l'image. Soyez prudent lorsque vous nettoyez et supprimez des images et lorsque vous configurez des règles de conservation pour votre registre de conteneur. Le remplacement d'une image étiquetée n'est pas problématique. Toutefois, des problèmes peuvent se produire si vous remplacez une image avec une règle de conservation activée qui supprime l'image non balisée ou si vous déclenchez manuellement un nettoyage des images non balisées.
Si l'erreur dans les événements système est similaire au message suivant, cette erreur indique que Code Engine ne peut pas extraire l'image de l'espace de nom du registre. Vérifiez que la balise de votre image pointe vers le prétraitement d'image correct.
Unable to pull the image. Image "<image_name>" does not exist in the registry namespace. Check your registry repository and tag. If the image exists in the repository, check whether the specified tag points to the correct image digest.Pour utiliser une image plus récente qui a été envoyée avec la même étiquette que votre application, vous devez mettre à jour votre application afin de créer une nouvelle révision d'application qui fait référence à l'image balisée plus récente.
-
Code Engine ne peut pas s'authentifier auprès de votre registre de conteneurs.
Dans ce scénario, votre image existe, l'accès au registre fonctionne et le secret de registre configuré est valide, mais Code Engine n'est pas en mesure de s'authentifier auprès du registre de votre conteneur. Il se peut qu'un message d'erreur similaire à celui présenté ci-dessous s'affiche :
ErrImagePull : failed to pull and unpack image "<image name>": failed to resolve reference "<image name>": failed to authorize: failed to fetch oauth token: unexpected status from GET request to...Vérifiez si vous avez activé
Restrict IP address accesspour votre compte (voir Autoriser des adresses IP spécifiques ). Si cette option est activée, seules les adresses IP autorisées peuvent s'authentifier sur IBM Cloud®, pour votre compte. Cela empêchera Code Engine de s'authentifier auprès de votre registre de conteneurs et donc d'extraire votre image. Vous devez ajouter les adresses IPpublicetprivatede votre projet Code Engine. Voir Code Engine adresses IP publiques et privées pour savoir comment identifier ces adresses IP.
Etapes suivantes
Pour en savoir plus sur le traitement des incidents liés aux images, voir Débogage d'images.
Pour plus d'informations sur le traitement des incidents liés aux applications, aux travaux et aux générations avec des remarques sur les images, voir les rubriques suivantes.
- Traitement des incidents liés aux applications-Pourquoi la création de mon application échoue-t-elle?
- Traitement des incidents liés aux applications-Pourquoi mon application a-t-elle cessé de s'exécuter?
- Traitement des incidents liés aux applications-Pourquoi mon application n'est-elle jamais prête?
- Traitement des incidents liés aux travaux-Pourquoi l'exécution de mon travail ne se termine-t-elle pas?
- Traitement des incidents liés aux travaux-Pourquoi ne puis-je pas soumettre un travail exécuté à l'aide de l'interface de ligne de commande?
- Traitement des incidents liés aux générations-Echec de la génération lors de l'étape de génération et d'envoi par commande push
- Traitement des incidents liés aux générations-Echec de la génération lorsque la limite de stockage temporaire est dépassée
- Traitement des incidents liés aux générations-Echec de la génération à l'étape source