Warum kann Code Engine kein Image extrahieren?

Wenn Sie eine „ Code Engine “-App bereitstellen oder einen Job ausführen, erhalten Sie eine Fehlermeldung, die den folgenden Text enthält: „ Unable to pull the image “.

Stellen Sie zur Behebung dieses Problems sicher, dass das Image vorhanden ist und Sie Zugriff auf das Image haben. Stellen Sie sicher, dass die folgenden Bedingungen erfüllt sind.

  • Um zu überprüfen, ob das Image für Ihre App oder Ihren Auftrag vorhanden ist, lesen Sie die Fehlermeldung, um Informationen zum Fehler zu erhalten.

  • Um Anwendungen bereitzustellen oder Jobs in „ Code Engine “ auszuführen, müssen Sie zunächst ein Container-Image erstellen, das alle Laufzeitkomponenten enthält, die Ihre Anwendung zur Ausführung benötigt, beispielsweise Laufzeitbibliotheken. Sie können viele verschiedene Methoden nutzen, um Das Container-Image erstellen zu nutzen, darunter auch die Erstellung Ihrer App aus dem Quellcode mithilfe der Funktion zum Erstellen von Container-Images, die unter Code Engine verfügbar ist. Das Image kann von einer öffentlichen oder privaten Image-Registry heruntergeladen werden. Weitere Informationen zum Zugriff auf private Registrys finden Sie unter Zugriff auf private Container-Registry hinzufügen.

  • Wenn Sie den Befehl ibmcloud ce app create, ibmcloud ce job create oder ibmcloud ce jobrun submit in der Befehlszeilenschnittstelle von Code Engine verwenden, geben Sie den Namen des Images, das für Ihre Anwendung oder Ihren Job verwendet wird, im Format REGISTRY/NAMESPACE/REPOSITORY:TAG an, wobei REGISTRY und TAG optional sind. Wenn REGISTRY nicht angegeben ist, lautet der Standardwert docker.io. Wenn TAG nicht angegeben ist, lautet der Standardwert latest. Überprüfen Sie diese Befehle auf weitere Informationen zu dem Format, das zur Angabe der Image-Registry verwendet werden soll.

Probieren Sie die folgenden Lösungen aus, um Ihr Problem zu beheben.

  1. Sie sind nicht berechtigt. Wenn Sie nicht über die erforderlichen Berechtigungen für den Zugriff auf das referenzierte Bild verfügen, wird der Erstellungsvorgang nicht abgeschlossen und es tritt ein Fehler auf. Sie erhalten eine Fehlernachricht ähnlich der folgenden: Unable to pull

    • Um sicherzustellen, dass Sie über Zugriff auf das referenzierte Image verfügen, überprüfen Sie die Position Ihres Image und bestätigen Sie, dass Sie über Berechtigungen für den Zugriff auf das Image verfügen.

    • Überprüfen Sie, ob Sie Registry-Zugriff auf Code Engine hinzugefügt haben und ob Sie den richtigen geheimen Registry-Schlüssel verwenden, wenn sich das Image in einer Container-Image-Registry befindet, wie z. B. Docker Hub oder IBM Cloud® Container Registry. Weitere Informationen zum Arbeiten mit Images in einer Container-Image-Registry finden Sie im Abschnitt zum Hinzufügen von Zugriff zu einer privaten Container-Registry.

  2. Das Container-Registry-Kontingent wurde überschritten.

      ibmcloud ce jobrun events --jobrun myjobrun
    
    • Wenn der Fehler in den Systemereignissen der folgenden Meldung ähnelt, weist dieser Fehler darauf hin, dass die Registrierungsquote überschritten wurde. Ziehen Sie ein Upgrade Ihres Plans in Betracht. Informationen zu IBM Cloud® Container Registry-Serviceplänen und -kontingenten finden Sie unter Informationen zu 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.
    
  3. Die Container-Registry muss authentifiziert werden.

    • Wenn der Fehler in den Systemereignissen der folgenden Meldung ähnelt, weist dieser Fehler darauf hin, dass kein Zugriff auf die Registrierung besteht oder möglicherweise eine Berechtigung erforderlich ist. Stellen Sie sicher, dass Ihre Anmeldedaten über die entsprechenden Zugriffsrechte auf die Registrierungsdatenbank verfügen.
    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.
    
  4. Code Engine kann Ihr Image nicht in Ihrer Container-Registry finden.

    In diesem Szenario ist Ihr Image vorhanden und der Registry-Zugriff funktioniert, aber Code Engine findet ein anderes Image als das Image, das für eine bestimmte Anwendungsrevision erwartet wurde. Der Container-Registry-Image-Digest stimmt nicht mit dem erwarteten Digest des Image für eine Anwendungsrevision überein.

    Wenn Sie Ihre Anwendung oder eine neue App-Version bereitstellen, wird die aktuellste Version des von Ihnen referenzierten Container-Images heruntergeladen und bereitgestellt, sofern für das Image kein Tag angegeben ist. Wenn ein Tag für das Image angegeben wird, wird das mit Tags versehene Image für die Implementierung verwendet.

    Wenn Sie eine neuere Version des Image mit demselben Tag wie das ursprüngliche Image erstellen, auf das Ihre Anwendung verweist, wird das ursprüngliche Image in der Container-Registry überschrieben. Code Engine kann dieses neuere Image jedoch nicht finden, weil das neuere Image einen anderen Digest als den Digest für die Anwendungsrevision hat. Das Image, das Ihrer speziellen Anwendungsrevision zugeordnet ist, hat einen eindeutigen Container-Registry-Digest und Code Engine verwendet diesen Digest für die Lebensdauer Ihrer Anwendungsrevision.

    Wenn Sie eine neuere Version eines Image mit demselben Tag wie das ursprüngliche Image erstellen, wird das ursprüngliche Image in der Container-Registry überschrieben und nicht mit Tags versehen. Das neuere Image ist mit Tags versehen und dieses neuere Image hat einen anderen Digest. Ihre Anwendung Code Engine verwendet dieses neuere Image nicht, weil das neuere Image einen anderen Digest als das von der Anwendungsrevision referenzierte Image hat. Code Engine kann weiterhin neue Instanzen der Anwendungsrevision erstellen, wenn das Image, auf das ursprünglich verwiesen wurde, noch vorhanden ist. Wenn das ursprünglich von Ihrer Anwendung referenzierte Image nicht vorhanden ist, findet Code Engine den erwarteten Image-Digest nicht und die Anwendung schlägt fehl, weil sie das Image nicht extrahieren kann. Seien Sie vorsichtig, wenn Sie Images bereinigen und löschen und wenn Sie Aufbewahrungsrichtlinien für Ihre Container-Registrierungsdatenbank konfigurieren. Das Überschreiben eines mit Tags versehenen Image ist nicht problematisch. Es können jedoch Probleme auftreten, wenn Sie ein Image mit einer aktivierten Aufbewahrungsrichtlinie überschreiben, die das nicht mit Tags versehene Image löscht, oder wenn Sie manuell eine Bereinigung von nicht mit Tags versehenen Images auslösen.

    Wenn der Fehler in den Systemereignissen der folgenden Nachricht ähnelt, gibt dieser Fehler an, dass Code Engine das Image nicht aus dem Registry-Namensbereich extrahieren kann. Überprüfen Sie, ob der Tag für Ihr Image auf den richtigen Image-Digest verweist.

    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.
    

    Wenn Sie ein neueres Image verwenden möchten, das mit demselben Tag mit Ihrer Anwendung übertragen wurde, müssen Sie Ihre Anwendung aktualisieren, um eine neue Anwendungsrevision zu erstellen, die auf das neuere mit Tags versehene Image verweist.

  5. Code Engine kann sich nicht bei Ihrer Container-Registrierung authentifizieren.

    In diesem Szenario existiert Ihr Image, der Zugriff auf die Registrierung funktioniert und das konfigurierte Registrierungsgeheimnis ist gültig, aber Code Engine ist nicht in der Lage, sich bei Ihrer Container-Registrierung zu authentifizieren. Möglicherweise erhalten Sie eine Fehlermeldung ähnlich der unten stehenden:

    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...
    

    Prüfen Sie, ob Sie Restrict IP address access für Ihr Konto aktiviert haben (siehe Bestimmte IP-Adressen zulassen ). Wenn diese Option aktiviert ist, können sich nur die erlaubten IP-Adressen für Ihr Konto bei IBM Cloud® authentifizieren. Dies verhindert, dass Code Engine sich bei der Container-Registry authentifizieren kann und somit nicht in der Lage ist, Ihr Image zu ziehen. Sie müssen die IP-Adressen public und private Ihres Projekts Code Engine hinzufügen. Siehe Code Engine Öffentliche und private IP-Adressen, um diese IP-Adressen zu identifizieren.

Nächste Schritte

Weitere Informationen zur Fehlerbehebung für Images finden Sie unter Debugging für Images.

Weitere Informationen zur Fehlerbehebung für Apps, Jobs und Builds mit Hinweisen zu Images finden Sie in den folgenden Abschnitten.