2016-12-29 161 views
13

我試圖使用aws-cli將Docker映像推送到AWS ECR存儲庫。MacOS Sierra Sierra授權令牌已過期問題AWS-CLI

  • 我只是運行get-login命令
  • 執行輸出(返回login succeeded
  • 然後嘗試推泊塢窗圖像,然後我得到的 消息:
    denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.

我不知道出了什麼問題,我正在推向正確的回購,我的Mac上的時間是正確的。 這是工作之前,但因爲我重新安裝我的mac並升級到macOS Sierra它不再工作,所以可能與此有關。

aws --version輸出:

aws-cli/1.11.34 Python/2.7.10 Darwin/16.3.0 botocore/1.4.91

我運行的命令的完整輸出:

$ aws ecr get-login --region eu-west-1 
docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com 
$ docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com 
Flag --email has been deprecated, will be removed in 1.13. 
Login Succeeded 
$ docker push 1234567890.dkr.ecr.eu-west-1.amazonaws.com/service-web:latest 
The push refers to a repository [1234567890.dkr.ecr.eu-west-1.amazonaws.com/service-web] 
c1f87971dfa9: Preparing 
2eb644aea3de: Preparing 
9c8843ffe48e: Preparing 
39bb58d049d4: Preparing 
f053bc969599: Preparing 
7169084246b8: Waiting 
bb134a1936fd: Waiting 
184e76848a1c: Waiting 
75c8fcf65748: Waiting 
eb9b9ee1ea58: Waiting 
f4bf35723edd: Waiting 
ddffe1a64b3c: Waiting 
fd1a1154db16: Waiting 
b542e946067a: Waiting 
d49ed2a5e1ed: Waiting 
bb39b980367a: Waiting 
25b8358d062f: Waiting 
997eee521fc7: Waiting 
50b5447183a8: Waiting 
4339b5cb0e1d: Waiting 
3dbd4a53b21b: Waiting 
2bec16216500: Waiting 
b9fd8e264df6: Waiting 
b6ca02dfe5e6: Waiting 
denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one. 
+0

當您的訪問ID和密鑰已被刪除,並且您需要在IAM控制檯中生成一個新密碼時,也會發生這種情況。 – tex

回答

10

最新泊塢窗的版本使用新的憑證存儲功能,has a bugdocker login與在指定協議的URL將導致令牌過期錯誤。這個問題將在Docker 1.13中解決。

目前,解決方法是在不指定協議的情況下執行登錄命令。

所以在通過aws ecr get-login返回命令的blob:

docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com 

應與此代替:

docker login -u AWS -p AQECAHh....b6Wk -e none 1234567890.dkr.ecr.eu-west-1.amazonaws.com 

省略https://應該讓泊塢窗工作暫且。

+0

刪除該方案不起作用。當我刪除它時,它根本沒有登錄,它只是掛起。我也嘗試添加http://而不是https://,但也沒有工作,並試圖添加:443而不是https://方案,但沒有運氣。 –

+1

它不適用於我,在Ubuntu Yakkety上使用Docker 1.13。刪除「https://」沒有任何區別,它表示它成功,但在推送時會導致相同的錯誤。 :( – Serandel

+1

這個修復了我在OS X,客戶端和服務器版本1.12.6上的docker-machine問題。謝謝! – mdjnewman

1

我用泊塢窗的穩定版本的Mac Version 1.12

我剛剛升級到beta版Version 1.13.0-rc4-beta34.1 (14853) 現在這一切按預期工作。

因此,如果有人遇到同樣的問題,請確保使用docker for mac版本1.13或更高版本,如果1.13尚未發佈,請切換到beta版本。

13

上述兩個解決方案都沒有爲我工作,但我發現,當我在Ecr登錄命令設置區域它的工作。

aws ecr get-login --region us-west-2

+0

這對我有用,謝謝。 –

+0

這也適用於我。 – pditommaso

+0

這也爲我解決了它。我認爲我的理由是,我試圖推動的ECR與'〜/ .aws/config'中的默認值不同。 – Malvineous

3

只是對Linux Mint的18.1(Ubuntu的16.04),與AWS ECR同樣的問題,並通過最新的2.5.1 Python Docker client使用最新的碼頭工人17.06.1策。登錄工作,推送失敗。

刪除~/.docker/config.json幫助。它只包含可能陳舊的授權令牌。

我不認爲它與底層操作系統有關。在我的情況下,它以前的工作,我記得唯一的變化是從Ubuntu回購的docker.io 1.12升級到碼頭回購的docker-ce 17.06

+0

工作。我有一個重複的條目爲同一地區。這可能會導致Docker混淆。 – johnsam

2

如果您在〜/ .aws/credentials(路徑取決於您的操作系統)中擁有多個憑證,並忘記添加--p標誌,您還會收到消息「您的授權令牌已過期」。

使用此命令來獲得登錄:

aws ecr get-login --region eu-west-1 --p <yourprofilename> 
+0

這不提供問題的答案。一旦你有足夠的[聲譽](https://stackoverflow.com/help/whats-reputation),你將可以[對任何帖子發表評論](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提問者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [來自評論](/ review/low-quality-posts/17260115) – the4kman

+0

感謝您的反饋意見。更新了我的答案。希望現在很清楚。 – Nik

+0

雖然這給你一個令牌,但令牌只有12小時有效。這對CI沒有好處。有沒有辦法增加令牌的到期時間? – MarzSocks

0

我知道這個職位是涉及到MacOS的塞拉利昂,但對於那些誰擁有Windows上的問題,我執行以下操作:

1) AWS ECR GET登錄,此命令將輸出一個長字符串

泊塢窗登錄-u AWS -p eyJwYXlsb2FkIjoiUXBnQ2FTV1B6Q1JqZGlH ..... (略更好地瞭解整條生產線) -e無https://xxxxxxx.dkr.ecr.us-east-1.amazonaws.com

2)複製並粘貼上面一行(也許-e沒有將無法正常工作,因此將其刪除太)。輸出將顯示警告,然後顯示成功: 警告!通過CLI使用--password是不安全的。使用--password-標準輸入 登錄成功

如果你需要使用一個安全的方式,使用--password-標準輸入

3)現在你可以放心地推圖像 -docker推XXXXXXX。 dkr.ecr.us-east-1.amazonaws.com/ecfs-test

0429f33dd264: Pushed 
48accfb13167: Pushed 
f3bb6dd29c05: Pushed 
e58ae65fa4eb: Pushed 
3c6037fae296: Pushed 
3efd1f7c01f6: Pushed 
73b4683e66e8: Pushed 
ee60293db08f: Pushed 
9dc188d975fd: Pushed 
58bcc73dcf40: Pushed 
latest: digest: sha256:4354d137733c98a1bc8609d2d2f8e97316373904e size: 2404 

也許這個解決方案將在Mac上工作了。

0

您需要刷新授權令牌每12小時嘗試:

$(aws ecr get-login --no-include-email --region us-east-1) - 根據您的配置

+0

這是我每次運行的第一個命令。 –

0

變化區域的警告:aws ecr get-login不會出現連接到AWS服務器,似乎即使工作您的AWS訪問/密鑰錯誤,或者您忘記將您的AWS訪問/密鑰輸入爲環境變量。

它仍然很樂意給你一個長的密碼,而不會提供錯誤。那麼,您從AWS獲得的消息是到期錯誤,而不是更正確和有用的「授權不正確」。

注意:使用aws-cli版本1.11.112。

1

我也得到了同樣的錯誤,下面是我試圖解決方案,它是工作: 1.運行命令: AWS ECR獲取登錄--no-包括電子郵件--region AP-東南-1(根據您的存儲庫更改區域) 2。你會得到輸出類似於: 泊塢窗登錄-u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == https://youraccountid.dkr.ecr.ap-southeast-1.amazonaws.com

刪除 「https://開頭」,然後作爲 泊塢窗登錄-u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == youraccountid.dkr運行命令.ecr.ap-southeast-1.amazonaws.com

它會工作,您將能夠推送圖像。

0

在我的情況下,問題是在〜/ .aws/credentails多個證書,所以我用--profile

aws ecr get-login --no-include-email --region us-east-2 --profile xxxx 

這爲我工作。