更新时间:2023-12-04 GMT+08:00
分享

构建失败,报错“too many requests”

问题现象

构建失败,报错信息如下:

toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

原因分析

构建任务中使用的基础镜像源为DockerHub。由于DockerHub的限制,短时间内拉取次数较多时将受限无法拉取,因此可能会造成构建失败。

处理方法

可首先制作基础依赖镜像,推送到容器镜像服务中,以供正式构建时获取。

  1. 新建构建任务。

    1. 进入“凤凰商城”项目,单击导航持续交付 > 编译构建
    2. 单击“新建任务”,任务名称设置为“phoenix-prebuild”,源码源及仓库信息与预置任务“phoenix-sample-ci”保持一致,单击“下一步”
    3. 选择“空白构建模板”,单击“下一步”

  2. 配置参数。

    1. 选择“参数设置”页签,单击“新增参数”
    2. 输入名称“dockerOrg”,将在SWR服务中创建的组织名称填入默认值。

  3. 选择“构建步骤”页签,配置构建步骤。

    1. 添加步骤“执行shell命令”,删除命令框中的命令行,输入以下命令。
      echo from postgres:9.4 > Dockerfile-postgres
      echo from redis:alpine > Dockerfile-redis
      echo from node:8.16-slim > Dockerfile-node
      echo from python:2.7-alpine > Dockerfile-python
      echo from java:openjdk-8-jdk-alpine > Dockerfile-java
    2. 添加步骤“制作镜像并推送到SWR仓库”,修改步骤显示名称为“制作Postgres镜像并推送到SWR仓库”,参照表1完成配置。
      表1 Postgres镜像配置

      配置项

      配置建议

      组织

      ${dockerOrg}

      镜像名字

      postgres

      镜像标签

      9.4

      Dockerfile路径

      ./Dockerfile-postgres

    3. 添加步骤“制作镜像并推送到SWR仓库”,修改步骤显示名称为“制作Redis镜像并推送到SWR仓库”,参照表2完成配置。
      表2 Redis镜像配置

      配置项

      配置建议

      组织

      ${dockerOrg}

      镜像名字

      redis

      镜像标签

      alpine

      Dockerfile路径

      ./Dockerfile-redis

    4. 添加步骤“制作镜像并推送到SWR仓库”,修改步骤显示名称为“制作Node镜像并推送到SWR仓库”,参照表3完成配置。
      表3 Node镜像配置

      配置项

      配置建议

      组织

      ${dockerOrg}

      镜像名字

      node

      镜像标签

      8.16-slim

      Dockerfile路径

      ./Dockerfile-node

    5. 添加步骤“制作镜像并推送到SWR仓库”,修改步骤显示名称为“制作Python镜像并推送到SWR仓库”,参照表4完成配置。
      表4 Python镜像配置

      配置项

      配置建议

      组织

      ${dockerOrg}

      镜像名字

      python

      镜像标签

      2.7-alpine

      Dockerfile路径

      ./Dockerfile-python

    6. 添加步骤“制作镜像并推送到SWR仓库”,修改步骤显示名称为“制作Java镜像并推送到SWR仓库”,参照表5完成配置。
      表5 Java镜像配置

      配置项

      配置建议

      组织

      ${dockerOrg}

      镜像名字

      java

      镜像标签

      openjdk-8-jdk-alpine

      Dockerfile路径

      ./Dockerfile-java

  4. 生成基础镜像。

    1. 单击“新建并执行”,启动编译构建任务。

      当页面中显示时,表示任务执行成功。

      若构建时仍出现同样的报错信息,请参考相关操作设置镜像加速器。

    2. 进入SWR控制台,在页面左侧导航选择“我的镜像”

      列表中可看到新增的5个镜像(java、python、node、redis、postgres)。

      图1 基础镜像

  5. 替换基础镜像源地址。

    1. 单击导航代码 > 代码托管,选择代码仓库“phoenix-sample”
    2. 参照表6编辑代码文件中的基础镜像源地址。

      表中的“${dockerServer}”“${dockerOrg}”仅为参数示例。实际替换镜像源地址时,请参照图2所示,将“${dockerServer}”配置SWR服务中记录的SWR服务器地址,“${dockerOrg}”替换为在配置SWR服务中创建的组织。

      表6 替换基础镜像源地址

      路径与位置

      修改前内容

      修改后内容

      文件“result/Dockerfile”第1行

      node:5.11.0-slim

      ${dockerServer}/${dockerOrg}/node:8.16-slim

      文件“/vote/Dockerfile”第2行

      python:2.7-alpine

      ${dockerServer}/${dockerOrg}/python:2.7-alpine

      文件“/worker/Dockerfile.j2”第1行

      java:openjdk-8-jdk-alpine

      ${dockerServer}/${dockerOrg}/java:openjdk-8-jdk-alpine

      图2 替换基础镜像源地址

完成以上操作步骤后,Postgres和Redis镜像已制作完成,因此在编辑预置任务“phoenix-sample-ci”时,请禁用以下步骤:

  • 生成Postgres and Redis Dockerfile
  • 制作Postgres镜像并推送到SWR仓库
  • 制作Redis镜像并推送到SWR仓库

相关操作

容器镜像服务提供了镜像加速器功能,

  1. 登录容器镜像服务控制台
  2. 单击页面左侧导镜像资源 > 镜像中心,进入“镜像中心”页面。
  3. 单击“镜像加速器”,在弹框中找到加速器地址,复制“https://”之后的内容。

    图3 镜像加速器

  4. 进入代码托管服务,修改代码中引用的镜像地址。

    • 将文件“result/Dockerfile”中第一行代码修改为以下内容,如所示。
      FROM 加速器地址/library/node:8.16-slim
    • 将文件“/vote/Dockerfile”中第二行代码修改为以下内容。
      FROM 加速器地址/library/python:2.7-alpine
    • 将文件“/worker/Dockerfile.j2”中第一行代码修改为以下内容。
      FROM 加速器地址/library/java:openjdk-8-jdk-alpine

  5. 进入编译构建服务,编辑任务“phoenix-prebuild”

    将步骤“执行Shell命令”中的命令行修改为以下内容。

    echo from 加速器地址/library/postgres:9.4 > Dockerfile-postgres
    echo from 加速器地址/library/redis:alpine > Dockerfile-redis
    echo from 加速器地址/library/node:8.16-slim > Dockerfile-node
    echo from 加速器地址/library/python:2.7-alpine > Dockerfile-python
    echo from 加速器地址/library/java:openjdk-8-jdk-alpine > Dockerfile-java

  6. 保存并执行构建任务。

分享:

    相关文档

    相关产品