【问题标题】:Unable to use the "Docker push" command with ECR无法将“Docker push”命令与 ECR 一起使用
【发布时间】:2016-11-12 01:18:43
【问题描述】:

由于 ECR 登录问题,我无法使用 Bamboo 中的“Docker”任务将 Docker 映像推送到 AWS Elastic Container Repository (ECR)。我的输出如下所示:

build   18-Oct-2016 12:11:54    9007f5987db3: Preparing
build   18-Oct-2016 12:11:54    b718b2f27b6c: Waiting
build   18-Oct-2016 12:11:54    c986610bcfe6: Waiting
build   18-Oct-2016 12:11:54    ee16ea28e998: Waiting
build   18-Oct-2016 12:11:54    a709d74a4732: Waiting
build   18-Oct-2016 12:11:54    c672d981aff9: Waiting
build   18-Oct-2016 12:11:54    17287d14d5b6: Waiting
build   18-Oct-2016 12:11:54    4505f2891620: Waiting
build   18-Oct-2016 12:11:54    94102dff0575: Waiting
build   18-Oct-2016 12:11:54    e83e87cb73c3: Waiting
build   18-Oct-2016 12:11:54    740e5e49ea89: Waiting
build   18-Oct-2016 12:11:54    092e6cb28bdb: Waiting
build   18-Oct-2016 12:11:54    9007f5987db3: Waiting
build   18-Oct-2016 12:11:54    8d94959a46f4: Waiting
build   18-Oct-2016 12:11:54    d2ccc68b6943: Waiting
build   18-Oct-2016 12:11:54    3dc6be5926c6: Waiting
build   18-Oct-2016 12:11:54    0afc75223403: Waiting
build   18-Oct-2016 12:11:54    71caa5138f3c: Waiting
build   18-Oct-2016 12:11:54    1be454502782: Waiting
build   18-Oct-2016 12:11:54    4a2173830433: Waiting
error   18-Oct-2016 12:11:54    error parsing HTTP 403 response body: invalid character 'Y' looking for beginning of value: "Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one."
simple  18-Oct-2016 12:11:54    Failing task since return code of [/bin/sh /tmp/WEB-SYNAPICI-JOB1-11-ScriptBuildTask-245668070788779382.sh] was 1 while expected 0

【问题讨论】:

    标签: docker bamboo amazon-ecs


    【解决方案1】:

    我发现aws ecr get-login 命令正在生成一个以https:// 为前缀的URL。为了让 Bamboo 推送到我的存储库,我不得不从使用 Bamboo 任务切换到使用自定义 bash 脚本,该脚本从 docker login 命令前面去除“https://”,以便存储库是正在登录的 URL 与被推送到的存储库完全相同。

    我觉得这可能是 AWS 客户端的一个错误,但这是我的脚本,以防其他人发现它有用:

    #!/usr/bin/env bash
    docker_login_command=$(aws ecr get-login)
    $(echo $docker_login_command | sed 's|https://||' | sed 's|-e none ||')
    container_id=$(docker images | grep foo | awk '{print $3;}' | uniq)
    echo $container_id
    url="output-of-the-ecr-create-repository-command.dkr.ecr.eu-west-1.amazonaws.com/bar/foo"
    docker tag $container_id $url
    docker push $url
    

    【讨论】:

    • 我很想知道是否有人有比退回到 bash 脚本更优雅的解决方案。我也觉得aws ecr get-login 命令的输出实际上应该将您登录到您需要成功运行docker push 的完全相同的存储库中。
    • 这实际上也是docker回复"no such repository"存在的问题的解决方案。
    【解决方案2】:

    我很想知道是否有人有比退回到 bash 脚本更优雅的解决方案。

    如果您正在寻找非基于脚本的解决方案,您可能对 Utoolity 的 Identity Federation for AWS (Bamboo) 附加组件(商业,请参阅免责声明)感兴趣,它提供了一个专用的 Amazon ECR Credentials Variables 任务来注入临时 Amazon EC2 容器其他工具和 AWS 不知道的任务(如 Bamboo Docker 任务)的注册表 (Amazon ECR) 身份验证凭证

    具体来说,它会创建以下变量,您可以在后续任务中任何需要 ECR 凭据的地方引用这些变量(前提是它们正确支持 Bamboo 变量):

    ${bamboo.custom.aws.ecr.proxyEndpointDomain}
    ${bamboo.custom.aws.ecr.username}
    ${bamboo.custom.aws.ecr.password}
    

    请参阅How to push a Docker image to a repository in your Amazon ECR registry with the Bamboo Docker task 获取分步指南。

    免责声明:我是该插件供应商 Utoolity 的联合创始人。

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多