Warum wurde die Ausführung meiner App gestoppt?
Nachdem Sie eine App bereitgestellt haben, wird die App eine Weile ausgeführt und dann unerwartet beendet.
Stellen Sie fest, ob einer der folgenden Fälle zutrifft.
- Ihr App-Code enthält einen Exit, wenn der Ausführungszyklus abgeschlossen ist.
- Ihr App-Code enthält einen Fehler, der dazu führt, dass die App unerwartet beendet wird.
- Das Image, aus dem Ihre App extrahiert wird, ist nicht mehr vorhanden, weil Sie es oder Ihre Image-Aufbewahrungsrichtlinie in IBM Cloud Container Registry gelöscht haben. Beispiel: Ihre App skaliert aufgrund eingehender Anforderungen nach oben. Die Skalierung schlägt jedoch fehl, weil das Image nicht mehr in Container Registryvorhanden ist. Eine weitere typische Situation ist, wenn sich Ihre App auf einem Workerknoten befindet, für den der Empfang der neuesten Sicherheitsfixes geplant ist. Wenn Code Engine versucht, Ihre App auf einen anderen Workerknoten zu verschieben, und das Image nicht finden kann, schlägt die Verschiebung fehl und die App funktioniert nicht mehr.
- Das Image, aus dem Ihre App extrahiert wird, ist nicht mehr vorhanden, weil es, während das Image mit dem bereitgestellten Tag vorhanden ist, nach der Erstellung einer Anwendungsrevision überschrieben wurde. Das Image, das Ihrer speziellen Anwendungsrevision zugeordnet ist, verwendet einen eindeutigen Container-Registry-Digest. Dieser Digest wird für die Lebensdauer Ihrer Anwendungsrevision verwendet. Wenn Sie eine neuere Version des Image mit demselben Tag wie das ursprüngliche Image erstellen, wird das ursprüngliche Image in der Container-Registry überschrieben. Code Engine kann dieses neuere Image jedoch nicht finden, da das neuere Image einen anderen Digest als den Digest für die Anwendungsrevision hat. Es können keine neuen Instanzen der Anwendung erstellt und dieses Szenario führt zu einem Fehler der Anwendung.
Versuchen Sie die folgenden Lösungen, um Ihr Problem zu beheben.
-
Code Engine-Apps sind für die Ausführung ohne Beenden konzipiert. Wenn Ihr App-Code einen Exit enthält, sollten Sie stattdessen Ihren Code als Job ausführen.
-
Suchen Sie nach Nachrichten, die Ihnen bei der Bestimmung der Ursache helfen könnten. Wenn Sie die Protokollierung für Code Enginekonfigurieren, enthalten Ihre Protokolldateien möglicherweise Nachrichten. Weitere Informationen zur Protokollierung finden Sie im Thema Protokolle anzeigen. Ihre App muss der 12-Faktor-App-Methodikentsprechen. Wenn zum Beispiel die zugrunde liegende Struktur von Code Engine, auf der Ihre App ausgeführt wird, eine Aktualisierung erfordert, wird eine neue Instanz Ihrer App in der aktualisierten Infrastruktur erstellt. Wenn Ihre neue App-Instanz als
Readymarkiert ist, leitet Code Engine Datenverkehr an sie weiter. Ihre alte App erhält dann eineSIGTERM-Nachricht, damit sie sicher heruntergefahren werden kann. Wenn sie nicht beendet wird, sendet Code Engine eineSIGKILL-Nachricht und Ihre alte App-Instanz wird gelöscht, was zum Datenverlust führen kann. -
Erstellen Sie das Image erneut in Container Registry und stellen Sie dann eine weitere Instanz Ihrer App bereit. Überprüfen Sie anschließend Ihre Richtlinie zur Aufbewahrung von Images in Container Registry, damit Images, die von aktiven Überarbeitungen verwendet werden, nicht gelöscht werden. Wenn Sie Toolchain-Vorlagen für Code Engineverwenden, können Sie Ihrer Pipelinedefinition auch Logik hinzufügen, um nicht verwendete Versionen Ihres Image erst nach der Bereitstellung einer funktionierenden Version zu löschen.
-
Erstellen Sie eine neue Revision für Ihre App, indem Sie Ihre Anwendung aktualisieren. Wenn ein Image mit demselben Tag mit Push-Operation übertragen wird, müssen Sie Ihre Anwendung aktualisieren, um eine neue Überarbeitung zu erstellen, die dieses aktualisierte Image verwendet.