Pourquoi mon application a-t-elle cessé de s'exécuter?

Une fois que vous avez déployé une application, celle-ci s'exécute pendant un certain temps, puis s'arrête de manière inattendue.

Déterminez si l'une des observations suivantes est vraie.

  1. Votre code d'application inclut un exit lorsqu'il termine son cycle d'exécution.
  2. Votre code d'application contient une erreur qui provoque l'arrêt inattendu de l'application.
  3. L'image à partir de laquelle votre application est extraite n'existe plus car vous l'avez supprimée ou votre règle de conservation des images dans IBM Cloud Container Registry a provoqué sa suppression. Par exemple, votre application est en augmentation en raison de demandes entrantes. Toutefois, la mise à l'échelle échoue car l'image n'existe plus dans Container Registry. Une autre situation typique est si votre application se trouve sur un noeud worker qui est planifié pour recevoir les derniers correctifs de sécurité. Si Code Engine tente de déplacer votre application vers un autre noeud worker et ne trouve pas l'image, le déplacement échoue et l'application cesse de fonctionner.
  4. L'image à partir de laquelle votre application est extraite n'existe plus car, alors que l'image avec la balise fournie existe, elle a été remplacée après la création d'une révision d'application. L'image associée à votre révision d'application spécifique utilise un digest de registre de conteneur unique et ce digest est utilisé pour la durée de vie de votre révision d'application. Si vous créez une version plus récente de l'image avec la même balise que l'image d'origine, 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 a un prétraitement différent de celui de la révision d'application. Aucune nouvelle instance de l'application ne peut être créée et ce scénario entraîne un échec de l'application.

Essayez les solutions suivantes pour résoudre votre problème.

  1. Les applications Code Engine sont conçues pour s'exécuter sans quitter. Si votre code d'application inclut un exit, envisagez d' exécuter votre code en tant que travail à la place.

  2. Recherchez les messages susceptibles de vous aider à déterminer la cause. Si vous configurez la journalisation pour Code Engine, vos fichiers journaux peuvent contenir des messages. Pour plus d'informations sur la journalisation, voir Affichage des journaux. Votre application doit suivre la méthodologie de l'application à 12 facteurs. Par exemple, si la structure sous-jacente de Code Engine sur laquelle votre application s'exécute nécessite une mise à jour, une nouvelle instance de votre application est créée sur l'infrastructure mise à jour. Lorsque votre nouvelle instance d'application est marquée comme Ready, Code Engine lui achemine le trafic. Votre ancienne application reçoit ensuite un message SIGTERM, lui laissant le temps de s'arrêter en toute sécurité. S'il ne s'arrête pas, Code Engine envoie un message SIGKILL et votre ancienne instance d'application est détruite, ce qui peut entraîner la perte de données.

  3. Recréez l'image dans Container Registry, puis déployez une autre instance de votre application. Vérifiez ensuite votre règle de conservation des images dans Container Registry afin que les images utilisées par les révisions actives ne soient pas supprimées. Si vous utilisez des modèles de chaîne d'outils pour Code Engine, vous pouvez également ajouter une logique à votre définition de pipeline pour supprimer les versions inutilisées de votre image uniquement après le déploiement d'une version de travail.

  4. Créez une nouvelle révision pour votre application en mettant à jour votre application. Si une image est envoyée par commande push avec la même balise, vous devez mettre à jour votre application pour créer une nouvelle révision qui utilise cette image mise à jour.