Probleme mit Container-Images beheben

Hier finden Sie hilfreiche Informationen zur Fehlerbehebung bei Problemen mit der Verwaltung von Container-Images in Artifact Registry.

Image kann nicht abgerufen oder in einer Google Cloud-Laufzeitumgebung bereitgestellt werden

Prüfen Sie Folgendes:

  1. Überprüfen Sie, ob der vollständige Pfad des hochzuladenden Images korrekt ist. Der Pfad muss den Registry-Hostnamen, die Google Cloud-Projekt-ID, das Repository und das Image enthalten. Beispiel:

    us-east1-docker.pkg.dev/my-project/my-repo/my-image:v1
    

    Weitere Informationen finden Sie unter Repository- und Image-Namen.

  2. Prüfen Sie, ob das Konto, über das das Image abgerufen wird, Berechtigungen zum Lesen aus dem Repository hat.

    • Das Cloud Build-Standarddienstkonto hat Lese- und Schreibberechtigungen für Repositories im selben Google Cloud-Projekt. Wenn Sie ein vom Nutzer bereitgestelltes Dienstkonto verwenden oder Images projektübergreifend per Push und Pull übertragen, weisen Sie dem Dienstkonto, mit dem Builds ausgeführt werden, die Rolle „Artifact Registry-Autor“ zu.
    • Compute Engine, Cloud Run und Google Kubernetes Engine haben standardmäßig Leseberechtigungen für Repositories im selben Projekt. Wenn sich Artifact Registry in einem anderen Projekt als die Laufzeitumgebung befindet, müssen Sie dem Laufzeitdienstkonto die Rolle „Artifact Registry-Leser“ zuweisen.
    • Wenn Sie Docker oder ein anderes Drittanbietertool verwenden, müssen Sie:

Image kann nicht per Push in Artifact Registry hochgeladen werden

Prüfen Sie Folgendes:

  1. Prüfen Sie, ob das Repository vorhanden ist. Im Gegensatz zu Container Registry ist die Repository-Erstellung ein anderer Vorgang als das Hochladen des ersten Images. Wenn das Repository nicht vorhanden ist, erstellen Sie es.

  2. Überprüfen Sie, ob der vollständige Pfad des hochzuladenden Images korrekt ist. Der Pfad muss den Registry-Hostnamen, die Google Cloud-Projekt-ID, das Repository und das Image enthalten. Beispiel:

    us-east1-docker.pkg.dev/my-project/my-repo/my-image:v1
    

    Jedes Artifact Registry-Repository ist eine separate Ressource. Sie können also kein Image ohne Repository in einen Pfad verschieben. us-east1-docker.pkg.dev/my-project/my-image:v1 ist beispielsweise ein ungültiger Image-Pfad.

    Weitere Informationen finden Sie unter Repository- und Image-Namen.

  3. Prüfen Sie, ob das Konto, über das das Image hochgeladen wird, Berechtigungen zum Schreiben in das Repository hat.

    • Das Cloud Build-Standarddienstkonto hat Lese- und Schreibberechtigungen für Repositories im selben Google Cloud-Projekt. Wenn Sie ein vom Nutzer bereitgestelltes Dienstkonto verwenden oder Images projektübergreifend per Push und Pull übertragen, weisen Sie dem Dienstkonto, mit dem Builds ausgeführt werden, die Rolle „Artifact Registry-Autor“ zu.
    • Compute Engine, Cloud Run und Google Kubernetes Engine haben standardmäßig Leseberechtigungen für Repositories im selben Projekt. Wenn Sie in diesen Umgebungen ein Drittanbietertool zum Übertragen von Images verwenden, müssen Sie dem Laufzeitdienstkonto die Rolle „Artifact Registry-Autor“ zuweisen.
  4. Wenn Artifact Registry die Nachricht The repository has enabled tag immutability zurückgegeben hat, ist die Tag-Unveränderlichkeit für das Repository konfiguriert. Sie können kein Image mit einem Tag hochladen, das bereits für eine andere Version desselben Images im Repository verwendet wird. Laden Sie das Image noch einmal mit einem Tag hoch, das von anderen gespeicherten Versionen des Images nicht verwendet wird.

    Wenn Sie prüfen möchten, ob ein Repository für unveränderliche Image-Tags konfiguriert ist, prüfen Sie in der Google Cloud Console in der Liste der Repositories die Spalte Unveränderliche Image-Tags oder führen Sie den folgenden Befehl aus:

    gcloud artifacts repositories describe REPOSITORY
        --project=PROJECT-ID
        --location=LOCATION
    

ImagePullBackOff- und ErrImagePull-Nachrichten

Meldungen mit ImagePullBackOff und ErrImagePull weisen darauf hin, dass ein Image nicht von GKE aus der Registry abgerufen werden kann.