如何解决在 AWS CodeBuild 中使用 Docker 映像时遇到的“提取映像配置时出错:请求过多”错误?

2 分钟阅读
0

我想解决我在 AWS CodeBuild 中使用 Docker 映像时遇到的“提取映像配置时出错:请求过多”错误。

简短描述

如果您在 CodeBuild 中使用 Docker 映像,则当您从公共 DockerHub 存储库中提取层时,可能会遇到限制。

要解决出现节流问题时遇到的错误,必须配置 CodeBuild 以便使用您的 DockerHub 帐户凭证对提取的图层进行身份验证。

**重要事项:**要完成以下步骤,您必须拥有 DockerHub 帐户以及该帐户的用户名和密码。

解决方法

使用 AWS Secrets Manager 存储您的 DockerHub 凭证

1.    打开 AWS Secrets Manager 控制台

2.    选择存储新密钥

3.    在选择密钥类型部分中,选择其他类型的密钥

4.    在指定要存储在此密钥中的键/值对部分中,选择密钥键/值选项卡。

5.    在第一个文本框中,输入 username。在第二个文本框中,输入您的 DockerHub 用户名。然后,选择添加行

6.    在新行的第一个文本框中,输入 password。在第二个文本框中,输入您的 DockerHub 密码。然后,选择添加行

7.    选择下一步

8.    在密钥名称中,输入您的密钥的名称。例如:dockerhub

9.    选择下一步

10.    确认已选择禁用自动轮换的默认设置。

11.    选择下一步

12.    选择存储

13.    在密钥名称列中,选择您的密钥。

14.    在密钥详细信息部分中,记下密钥 ARNAmazon 资源名称 (ARN)

**注意:**如果您创建了使用由客户管理的加密密钥配置的密钥,则必须使用该配置的密钥为 kms:Decrypt 操作添加权限。

解决预置阶段出现的节流问题

1.    打开 CodeBuild 控制台

2.    在导航窗格中,选择构建,然后选择构建项目

3.    选择您的构建项目。

4.    选择编辑,然后选择环境

5.    选择覆盖映像

6.    对于新环境映像,选择自定义映像

7.    对于环境类型,选择您的自定义映像。

8.    对于映像注册表,选择其他注册表

9.    在外部注册表 URL 中,输入您的 Docker 映像的名称。

10.    在注册凭证中,输入您之前记下的密钥 ARN。

11.    选择更新环境

解决在其他阶段出现的节流问题

**重要事项:**您必须向 CodeBuild 服务角色授予 AWS Identity and Access Management (IAM) 权限才能访问该密钥。

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 操作之前,修改您的构建规范并添加以下命令:

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 官方已更新 1 年前