Wie behebe ich den Fehler „error pulling image configuration: toomanyrequests“, wenn ich Docker-Images in AWS CodeBuild verwende?

Lesedauer: 4 Minute
0

Ich möchte den Fehler „error pulling image configuration: toomanyrequests“ beheben, der auftritt, wenn ich Docker-Images in AWS CodeBuild verwende.

Kurze Beschreibung

Wenn Sie Docker-Images in CodeBuild verwenden, kann es zu Drosselungen kommen, wenn Sie Ebenen aus dem öffentlichen DockerHub-Repository abrufen.

Um den Fehler zu beheben, der bei der Drosselung auftritt, müssen Sie CodeBuild so konfigurieren, dass die Layer-Pulls mit Ihren DockerHub-Kontoanmeldeinformationen authentifiziert werden.

**Wichtig:**Um die folgenden Schritte auszuführen, benötigen Sie ein DockerHub-Konto sowie den Benutzernamen und das Passwort für Ihr Konto.

Lösung

Speichern Sie Ihre DockerHub-Anmeldeinformationen mit dem AWS Secrets Manager

1.Öffnen Sie die AWS Secrets Manager-Konsole.

2.Wählen Sie Neues Geheimnis speichern aus.

3.Wählen Sie im Abschnitt Geheimnistyp auswählen die Option Andere Art von Geheimnissen aus.

4.Wählen Sie im Abschnitt Geben Sie die Schlüssel/Wert-Paare an, die in diesem geheimen Schlüssel gespeichert werden sollen, die Registerkarte Geheimer Schlüssel/Wert aus.

5.Geben Sie in das erste Textfeld den Benutzernamen ein. Geben Sie in das zweite Textfeld Ihren DockerHub-Benutzernamen ein. Wählen Sie dann Zeile hinzufügen.

6.Geben Sie in das erste Textfeld der neuen Zeile das Passwort ein. Geben Sie in das zweite Textfeld Ihr DockerHub-Passwort ein. Wählen Sie dann Zeile hinzufügen.

7.Wählen Sie Weiter aus.

8.Geben Sie unter Geheimnisname einen Namen für Ihr Geheimnis ein. Zum Beispiel: Dockerhub

9.Wählen Sie Weiter aus.

10.Vergewissern Sie sich, dass für Automatische Rotation deaktivieren die Standardeinstellung ausgewählt ist.

11.Wählen Sie Weiter aus.

12.Wählen Sie Speichern aus.

13.Wählen Sie in der Spalte Geheimnisname Ihr Geheimnis aus.

14.Notieren Sie sich im Abschnitt Geheimnisdetails den Amazon-Ressourcennamen (ARN) für den Geheimnis-ARN.

**Hinweis:**Wenn Sie ein Geheimnis erstellt haben, das mit einem vom Kunden verwalteten Verschlüsselungsschlüssel konfiguriert ist, müssen Sie mithilfe des konfigurierten Schlüssels Berechtigungen für die Aktion kms:Decrypt hinzufügen.

Beheben Sie Probleme mit Drosselungen, die in der PROVISIONING-Phase auftreten

1.Öffnen Sie die CodeBuild-Konsole.

2.Wählen Sie im Navigationsbereich Build und dann Build-Projekte aus.

3.Wählen Sie Ihr Build-Projekt aus.

4.Wählen Sie Bearbeiten und dann Umgebung aus.

5.Wählen Sie Image überschreiben aus.

6.Wählen Sie für Neues Umgebungs-Image die Option Benutzerdefiniertes Image aus.

7.Wählen Sie als Umgebungstyp Ihr benutzerdefiniertes Image aus.

8.Wählen Sie für die Image-Registrierung die Option Andere Registrierung aus.

9.Geben Sie für die Externe Registrierungs-URL den Namen Ihres Docker-Images ein.

10.Geben Sie als Anmeldeinformationen für die Registrierung den Geheimnis-ARN ein, den Sie zuvor notiert haben.

11.Wählen Sie Umgebung aktualisieren.

Beheben Sie Probleme mit Drosselungen, die in anderen Phasen auftreten

**Wichtig:**Sie müssen der CodeBuild-Servicerolle AWS Identity and Access Management (IAM)-Berechtigungen gewähren, um auf das Geheimnis zugreifen zu können.

1.Öffnen Sie die CodeBuild-Konsole.

2.Wählen Sie im Navigationsbereich Build und dann Build-Projekte aus.

3.Wählen Sie Ihr Build-Projekt aus.

4.Wählen Sie die Registerkarte Build-Details aus.

5.Wählen Sie im Abschnitt Umgebung für Servicerolle die Servicerolle ARN aus. Dadurch wird die IAM-Konsole geöffnet.

6.Wählen Sie auf der Registerkarte Berechtigungen die Option Inline-Richtlinie hinzufügen aus.

7.Wählen Sie die Registerkarte JSON aus.

8.Ersetzen Sie den Code im Texteditor durch die folgende IAM-Richtlinie:

**Hinweis:**Ersetzen Sie YOUR_SECRET_ARN durch den Geheimnis-ARN, den Sie zuvor notiert haben.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "YOUR_SECRET_ARN*"
      ]
    }
  ]
}

9.Wählen Sie Richtlinie überprüfen aus.

10.Geben Sie unter Name einen Namen für die Richtlinie ein. Zum Beispiel: dockerhub_secret_access **Hinweis:**Sie können einen beliebigen Namen für die Richtlinie wählen. Der Name dient nur zu Ihrer eigenen zukünftigen Referenz.

11.Wählen Sie Richtlinie erstellen aus.

Konfigurieren Sie CodeBuild, um das Geheimnis abzurufen

1.Öffnen Sie die CodeBuild-Konsole.

2.Wählen Sie im Navigationsbereich Build und dann Build-Projekte aus.

3.Wählen Sie Ihr Build-Projekt aus.

4.Wählen Sie Bearbeiten und dann Umgebung aus.

5.Erweitern Sie den Abschnitt Zusätzliche Konfiguration.

6.Um Umgebungsvariablen hinzuzufügen, geben Sie im Abschnitt Umgebung Variablen als Name DOCKERHUB_USERNAME ein.

7.Geben Sie für Wert den Namen Ihres Geheimnisses, gefolgt von :username ein. Zum Beispiel: dockerhub:username

8.Wählen Sie als Typ die Option Secrets Manager aus.

9.Um die nächste Umgebungsvariable hinzuzufügen, wählen Sie Umgebungsvariable hinzufügen aus.

10.Geben Sie als Namen DOCKERHUB_PASSWORD ein.

11.Geben Sie für Wert den Namen Ihres Geheimnisses ein, gefolgt von :password. Zum Beispiel: dockerhub:password

12.Wählen Sie als Typ die Option Secrets Manager aus.

13.Wählen Sie Umgebung aktualisieren.

14.Ändern Sie Ihre Buildspec und fügen Sie den folgenden Befehl hinzu, bevor Sie weitere Docker-Aktionen ausführen:

echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin

Warnung: Mit diesem Befehl können Details zu Ihrem Docker-Login-Benutzernamen und -Passwort in Build-Protokollen aufgezeichnet werden. Nachdem Sie den Drosselungs-Fehler behoben haben, setzen Sie Ihr Docker-Passwort zurück.

Zum Beispiel:

version: 0.2

phases:
  install:
    commands:
      - echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin
  build:
    commands:
      - docker pull docker:dind
AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr