“授权令牌已过期”在MacOS Sierra上发布AWS-CLI

问题描述 投票:28回答:14

我正在尝试使用aws-cli将docker镜像推送到AWS ECR存储库。

  • 我只是运行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.
amazon-web-services docker aws-cli macos-sierra
14个回答
29
投票

上面的解决方案都没有为我工作但我发现当我在ecr login命令中设置区域时它起作用了。

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


1
投票

在我的情况下,问题是〜/ .aws /凭证中的多个凭证我使用--profile

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

这对我有用。


0
投票

我知道帖子与MacOS Sierra有关,但对于那些在Windows上遇到问题的人,我执行了以下操作:

1)aws ecr get-login,此命令将输出一个长字符串

docker login -u AWS -p eyJwYXlsb2FkIjoiUXBnQ2FTV1B6Q1JqZGlH ......(省略了整行以便更好地理解)-e none https://xxxxxxx.dkr.ecr.us-east-1.amazonaws.com

2)复制并粘贴上面的行(也许-e none将不起作用,因此也将其删除)。输出将显示警告,然后成功:警告!通过CLI使用--password是不安全的。使用--password-stdin登录成功

如果需要使用安全方法,请使用--password-stdin

3)现在你可以安全地推动图像-docker push 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
投票

警告:aws ecr get-login似乎没有连接到AWS服务器,即使您有不良的AWS访问/密钥,或者您忘记输入AWS访问/密钥作为环境变量,它似乎也能正常工作。

它仍然会愉快地给你一个长密码而不会出错。然后,您从AWS获得的消息是过期错误,而不是更正确和有用的“授权不正确”。

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


0
投票

当我试图从另一个AWS账户的注册表中推/拉时,就会发生这种情况。我需要使用get-login标志运行--registry-ids,传入我想要登录的注册表的ID。


0
投票

问题是因为aws ecr get-login命令检索对指定注册表有效12小时的令牌,然后它打印带有该授权令牌的docker login命令,我们不会执行我们返回的命令。

我们需要执行此打印命令以使用Docker登录到您的注册表。在我的情况下,我使用eval来执行我从aws ecr get-login返回的打印命令,如下所示:

eval $(aws ecr get-login --region eu-west-1 --profile)


25
投票

您可能只是在运行命令,而不是将从该命令回显的命令粘贴回终端。容易犯错误。运行后:

aws ecr get-login --no-include-email --region us-east-1

它将打印出另一个要运行的命令,您需要复制该命令并在终端中运行它以完全进行身份验证。

或者一个很酷的捷径就是将echo'd命令传回shell中: aws ecr get-login --no-include-email --region us-east-1 | sh


20
投票

最新版本的Docker使用新的凭据存储功能,has a bug使用指定协议的URL执行docker login将导致令牌过期错误。这个问题将在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://sh可以使docker暂时工作。


6
投票

如果您在〜/ .aws / credentials(路径取决于您的操作系统)中有多个凭据,并且忘记添加--p标志,您还会收到消息“您的授权令牌已过期”。

使用此命令登录:

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

5
投票

在使用AWS ECR的Linux Mint 18.1(Ubuntu 16.04)和最新的Python Docker client 2.5.1使用的最新Docker 17.06.1-ce上遇到了同样的问题。登录工作,推送失败。

删除~/.docker/config.json有帮助。它只包含(可能是陈旧的)授权令牌。

我不认为它与底层操作系统有关。在我的情况下它以前工作,我唯一记得的变化是从Ubuntu repo的docker.io 1.12升级到Docker repo的docker-ce 17.06


5
投票

您需要每12小时刷新一次授权令牌,尝试:

$(aws ecr get-login --no-include-email --region us-east-1) - 根据您的配置更改区域


2
投票

我也遇到了同样的错误,下面是我尝试过的解决方案,它正在运行:1。运行命令:aws ecr get-login --no-include-email --region ap-southeast-1(根据修改区域)您的存储库)2。您将获得如下输出:docker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == https://youraccountid.dkr.ecr.ap-southeast-1.amazonaws.com

删除“https://”,然后运行命令为docker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == youraccountid.dkr.ecr.ap-southeast-1.amazonaws.com

它会工作,你将能够推动图像。


2
投票

我很幸运使用了eval。例如,

$ aws ecr get-login --region us-east-1 --no-include-email --profile username_env 

没工作。

$ eval $(aws ecr get-login --region us-east-1 --no-include-email --profile username_env)

干了。


1
投票

我使用稳定版的docker for mac Version 1.12

我刚刚升级到测试版Version 1.13.0-rc4-beta34.1 (14853),现在一切正常。

因此,如果有相同问题的人,请确保使用docker for mac version 1.13或更高版本,如果尚未发布1.13,请切换到测试版。

© www.soinside.com 2019 - 2024. All rights reserved.