Amazon web services `授权令牌已过期`在MacOS Sierra上发布AWS-CLI
我正在尝试使用AWS cli将docker映像推送到AWS ECR存储库Amazon web services `授权令牌已过期`在MacOS Sierra上发布AWS-CLI,amazon-web-services,docker,aws-cli,macos-sierra,Amazon Web Services,Docker,Aws Cli,Macos Sierra,我正在尝试使用AWS cli将docker映像推送到AWS ECR存储库 我只是运行get login命令 执行输出(返回登录成功) 然后尝试推一个docker图像,然后我得到 信息: 拒绝:您的授权令牌已过期。请跑 “aws ecr get login”获取新的登录名。 我不知道出了什么问题,我正在推进正确的回购协议,我的mac电脑上的时间是正确的。 这是工作之前,但由于我重新安装了我的mac并升级到macOS Sierra它不再工作,所以可能与此有关 我的aws--版本输出: aws c
- 我只是运行
命令get login
- 执行输出(返回
)登录成功
- 然后尝试推一个docker图像,然后我得到
信息:
拒绝:您的授权令牌已过期。请跑 “aws ecr get login”获取新的登录名。
aws--版本
输出:
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.
Docker的最新版本使用了新的凭据存储功能,其中使用指定协议的URL进行
Docker登录将导致令牌过期错误。此问题将在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://
应该可以让docker暂时工作。我使用的是mac版docker的稳定版本版本1.12
我刚刚升级到beta版1.13.0-rc4-beta34.1(14853)
现在一切都按计划进行了
因此,如果有人有同样的问题,请确保您使用docker for mac 1.13版或更高版本,如果1.13尚未发布,请切换到beta版。以上两种解决方案都不适用于my,但我发现,当我在ecr login命令中设置region时,它们都有效
aws ecr get login——region us-west-2
刚刚在Linux Mint 18.1(Ubuntu 16.04)上出现了同样的问题,aws ecr和最新的Docker 17.06.1-ce通过最新的2.5.1使用。登录成功,推送失败
删除~/.docker/config.json
有帮助。它只包含授权令牌,可能已经过时
我认为这与底层操作系统无关。在我的例子中,它以前工作过,我能回忆起的唯一变化是从Ubuntu repo的docker.io 1.12
升级到docker repo的docker ce 17.06
如果您在~/.aws/credentials中有多个凭据(路径取决于您的操作系统),您还会收到消息“您的授权令牌已过期”忘记添加--p标志
使用此命令获取登录名:
aws ecr get-login --region eu-west-1 -p <yourprofilename>
aws ecr获取登录信息——地区eu-west-1-p
我知道这篇文章与MacOS Sierra有关,但对于那些在Windows上有问题的人,我执行了以下操作:
1)aws ecr get login,此命令将输出一个长字符串
docker login-u AWS-p eyJwYXlsb2FkIjoiUXBnQ2FTV1B6Q1JqZGlH……(为了更好地理解,省略了整行)-无
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。您需要每12小时刷新一次授权令牌。请尝试:
$(aws ecr get登录--不包括电子邮件--地区us-east-1)
-根据您的配置更改区域警告:aws ecr get login
似乎无法连接到aws服务器,即使您的aws访问/密钥不正确,或者即使您忘记将aws访问/密钥作为环境变量输入,也无法正常工作
它仍然很乐意给你一个长密码,而不提供错误。那么,您从AWS得到的消息是一个过期错误,而不是更正确、更有用的“授权不正确”
注意:使用aws cli版本1.11.112。我也遇到了相同的错误,下面是我尝试过的解决方案,它正在工作: 1.运行命令: aws ecr get login--不包括电子邮件--地区ap-southeast-1(根据您的存储库更改地区) 2.您将获得如下输出: docker登录-u AWS-p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx== 删除“https://”,然后按如下方式运行命令 docker login-u AWS-p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==youraccountid.dkr.ecr.ap-Southwest-1.amazonaws.com
它将工作,您将能够推送图像。在我的例子中,问题是~/.aws/credentails中有多个凭据,所以我使用--profile
这对我有用 您可能只是在运行该命令,而没有将从该命令回显的命令粘贴回终端。容易犯错误。跑步后:
aws ecr获取登录信息--不包括电子邮件--地区us-east-1
它将打印出另一个要运行的命令,您需要复制该命令并在您的终端中运行它以进行完全验证
或者,一个很酷的快捷方式是通过管道将echo命令返回到shell中:aws ecr get login——不包括电子邮件——地区us-east-1 | sh
当我试图从另一个aws帐户的注册表中推/拉时,发生了这种情况。我需要使用--registry ids
标志运行get login
,传递我想要登录的注册表的ID。我很幸运使用了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)
确实有效。问题是因为aws ecr get login命令检索对指定注册表有效12小时的令牌,然后打印docker login命令w
$ eval $(aws ecr get-login --region us-east-1 --no-include-email --profile username_env)
eval "$(aws ecr get-login --no-include-email \
--region us-east-1 \
--registry-ids 11223344 \
)"
{
"auths": {
"XXXX.dkr.ecr.us-east-1.amazonaws.com": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.5 (windows)"
},
"credsStore": "desktop",
"stackOrchestrator": "swarm"
}
docker login -u AWS -p "XXX...the really long password ehre..XXX" https://XXXX.dkr.ecr.us-east-1.amazonaws.com
{
"auths": {
"XXXX.dkr.ecr.us-east-1.amazonaws.com": {
"auth": "XXX...the really long password ehre..XXX"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.5 (windows)"
},
"stackOrchestrator": "swarm"
}
aws ecr get-login-password \
--region REGION \
| docker login \
--username AWS \
--password-stdin ACCESS_ID.dkr.ecr.REGION.amazonaws.com
aws --region us-west-2 ecr get-login-password | docker login --username AWS --password-stdin xxxxxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${aws_account_id}.dkr.ecr.${region}.amazonaws.com
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <ACCESS_ID>.dkr.ecr.<REGION>.amazonaws.com
$(aws ecr get-login -no-include-email)
aws ecr get-login-password | docker login --username AWS --password-stdin MY-REGISTRY-URL
aws ecr get-login-password \
--region <region> \
| docker login \
--username AWS \
--password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
password=$(aws ecr get-login-password --region us-east-1)
echo $password | docker login --username AWS --password-stdin 787566098823.dkr.ecr.us-east-1.amazonaws.com