如何解決當我在 AWS CodeBuild 中使用 Docker 映像檔時出現的「提取映像組態錯誤:請求太多」錯誤?

2 分的閱讀內容
0

我想解決當我在 AWS CodeBuild 中使用 Docker 映像檔時出現的「提取映像組態錯誤:請求太多」錯誤。

簡短說明

如果您在 CodeBuild 中使用 Docker 映像檔,當您從公開的 Docker Hub 存放庫中提取圖層時,您可能會遇到限流問題。

若要解決在限流發生時收到的錯誤,您必須設定 CodeBuild,使用您的 DockerHub 帳戶憑證驗證圖層提取。

**重要事項:**要完成以下步驟,您必須擁有一個 DockerHub 帳戶以及帳戶的使用者名稱和密碼。

解決方法

使用 AWS Secrets Manager 儲存您的 DockerHub 憑證

1.    開啟 AWS Secrets Manager 主控台

2.    選擇儲存新密碼

3.    在選取密碼類型區段中,選擇其他密碼類型

4.    在指定要儲存在此密碼的金鑰/值組區段中,選擇秘密金鑰/值索引標籤。

5.    在第一個文字方塊中,輸入使用者名稱。在第二個文字方塊中,輸入您的 DockerHub 使用者名稱。然後,選擇新增列

6.    在新列的第一個文字方塊中,輸入密碼。在第二個文字方塊中,輸入您的 DockerHub 密碼。然後,選擇新增列

7.    選擇下一步

8.    在密碼名稱中,輸入密碼的名稱。例如:dockerhub

9.    選擇下一步

10.    確認已選取停用自動旋轉的預設設定。

11.    選擇下一步

12.    選擇儲存

13.    在密碼名稱欄中,選擇您的密碼。

14.    在密碼詳細資料區段中,記下秘密 ARNAmazon Resource Name (ARN)

**注意:**如果您已使用客戶自管加密金鑰建立密碼,則必須使用設定的金鑰為 kms:Decrypt 動作新增權限。

解決「佈建」階段中發生的限流

1.    開啟 CodeBuild 主控台

2.    在導覽窗格中,選擇建置,然後選擇建置專案

3.    選擇您的建置專案。

4.    選擇編輯,然後選擇環境

5.    選擇覆寫映像

6.    在新增環境映像下,選擇自訂映像

7.    在環境類型下,選取您的自訂映像檔。

8.    在映像登錄下,請選擇其他登錄

9.    在外部登錄 URL,請輸入 Docker 映像檔的名稱。

10.    在登錄登入資料,輸入您之前記下的秘密 ARN。

11.    選擇更新環境

解決其他階段發生的限流

**重要事項:**您必須將 AWS 身分和存取管理 (IAM) 許可授予 CodeBuild 服務角色,才能存取密碼。

1.    開啟 CodeBuild 主控台

2.    在導覽窗格中,選擇建置,然後選擇建置專案

3.    選擇您的建置專案。

4.    選擇建置詳細資料索引標籤。

5.    在環境區段中的服務角色下,選擇服務角色 ARN。這會開啟 IAM 主控台。

6.    在權限索引標籤上,選擇新增內嵌政策

7.    選擇 JSON 索引標籤。

8.    將文字編輯器的程式碼取代為下列 IAM 政策:

**注意:**將 YOUR_SECRET_ARN 替換為您之前記下的秘密 ARN。

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

9.    選擇檢閱政策

10.    在名稱中,輸入政策的名稱。例如 dockerhub_secret_access **注意:**您可以為政策選擇任何名稱。該名稱僅供您將來參考。

11.    選擇建立政策

設定 CodeBuild 以擷取密碼

1.    開啟 CodeBuild 主控台

2.    在導覽窗格中,選擇建置,然後選擇建置專案

3.    選擇您的建置專案。

4.    選擇編輯,然後選擇環境

5.    展開其他組態區段。

6.    若要新增環境變數,請在環境變數區段中的名稱中,輸入 DOCKERHUB_USERNAME

7.    在中,輸入密碼的名稱,後面接著 :username。例如:dockerhub:username

8.    在類型下,選擇 Secrets Manager

9.    若要新增下一個環境變數,請選擇新增環境變數

10.    在名稱中,輸入 DOCKERHUB_PASSWORD

11.    在中,輸入密碼名稱,後面接著 :password。例如:dockerhub:password

12.    在類型下,選擇 Secrets Manager

13.    選擇更新環境

14.    在執行任何其他 Docker 操作之前,請修改您的 buildspec 並新增以下命令:

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

警告: 此命令可以在建置日誌中記錄 Docker 登入使用者名稱和密碼的詳細資料。解決限流錯誤後,請重設 Docker 密碼。

例如:

version: 0.2

phases:
  install:
    commands:
      - echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin
  build:
    commands:
      - docker pull docker:dind
AWS 官方
AWS 官方已更新 2 年前