无法在ECR中使用“Docker push”命令

由于ECRlogin问题,我无法使用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 

我发现aws ecr get-login命令生成了一个以https://为前缀的URL。 为了让Bamboo推送到我的仓库,我必须从使用Bamboo任务切换到使用自定义的bash脚本,从docker login命令的前面剥离“https://”,以便正在存储的存储库login到与正在推送到的存储库完全相同的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脚本更优雅的解决scheme。

如果您正在寻找一个基于非脚本的解决scheme,那么您可能会对Utoolity的AWS(Bamboo)附加组件(商业版,请参阅免责声明)感兴趣,该附加组件提供专用的Amazon ECR凭据variables任务以注入临时Amazon EC2容器registry(Amazon ECR)身份validation凭据以及其他工具和AWS不知道的任务(如Bamboo Docker任务)

具体来说,它创build了以下variables,您可以在后续任务中需要引用ECR凭据的地方(只要它们能够正确支持Bamboovariables):

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

请参阅如何使用Bamboo Docker任务将Docker映像推送到Amazon ECRregistry中的存储库,以获得逐步指导。

免责声明 :我是这个附加供应商Utoolity的联合创始人。