更新时间:2024-07-12 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”。

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

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

      表中的“${dockerServer}”、“${dockerOrg}”仅为参数示例。实际替换镜像源地址时,请参照图1所示,将“${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

      图1 替换基础镜像源地址

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

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

相关操作

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

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

    图2 镜像加速器

  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. 保存并执行构建任务。

相关文档