2016-10-18 75 views
2

由於ECR登錄問題,我無法使用Bamboo中的「Docker」任務將Docker鏡像推送到AWS Elastic Container Repository(ECR)。我的輸出是這樣的:無法在ECR中使用「Docker push」命令

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 

回答

2

我發現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 
+0

我想知道是否有人比退回到bash腳本有更優雅的解決方案。我也覺得'aws ecr get-login'命令的輸出實際上應該會將您登錄到您需要成功運行'docker push'的完全相同的存儲庫中。 – DuffJ

+0

這實際上也是解決問題的方法,其中'docker'迴應了''沒有這樣的存儲庫''存在。 –

0

我很想知道,如果任何人有一個更優雅解決方案,而不是退回到bash腳本。

如果你正在尋找一個非基於腳本的解決方案,您可能會感興趣的Utoolity的Identity Federation for AWS (Bamboo)附加(商業,參閱免責聲明),它提供了一個專用Amazon ECR Credentials Variables任務注入臨時亞馬遜EC2容器註冊(亞馬遜ECR)其他工具的認證憑證和AWS未知任務(如Bamboo Docker任務)。

具體來說,它會創建下列變量,你可以參考一下,無論你需要在後續任務ECR憑證(前提是正確地支持竹變量):

${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的聯合創始人。

相關問題