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

Lud*_*ord 33 amazon-web-services docker aws-cli macos-sierra

我正在尝试使用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.
Run Code Online (Sandbox Code Playgroud)

小智 34

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

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

  • get-login 已弃用。我在这里添加了更新的答案:/sf/ask/2896586591/#62736623 (2认同)

小智 33

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

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


wkl*_*wkl 23

最新版本的Docker使用新的凭据存储功能,该功能存在一个错误,docker login即使用指定协议的URL 执行会导致令牌过期错误.这个问题将在Docker 1.13中修复.

目前,解决方法是在不指定协议的情况下执行登录命令.

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

docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

应该替换为:

docker login -u AWS -p AQECAHh....b6Wk -e none 1234567890.dkr.ecr.eu-west-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

省略https://应该让docker暂时工作.

  • 在Ubuntu Yakkety上使用Docker 1.13对我不起作用.删除"https://"没有区别,它表示成功但在推送时会导致相同的错误.:( (3认同)

Jos*_*lff 11

这个答案使用 AWS CLI v2.0.26 对我有用

https://github.com/aws/aws-cli/issues/4962#issuecomment-592064025

aws --region us-west-2 ecr get-login-password | docker login --username AWS --password-stdin xxxxxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

其中 us-west-2 是您所在的地区,xxxxxxxxxxxxxx 是您的帐户 ID,位于此处“存储库名称”下方的行首:https : //us-west-2.console.aws.amazon.com/ecr/ create-repository?region=us-west-2


zoo*_*lin 8

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

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


jaw*_*846 8

简单命令:

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
Run Code Online (Sandbox Code Playgroud)

  • 对于使用上述命令的任何人,您可能需要更改上述命令中提到的“region”。 (2认同)

小智 6

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

使用以下命令进行登录:

aws ecr get-login --region eu-west-1 -p <yourprofilename>
Run Code Online (Sandbox Code Playgroud)


小智 6

我很幸运使用 eval。例如,

$ aws ecr get-login --region us-east-1 --no-include-email --profile username_env 
Run Code Online (Sandbox Code Playgroud)

没用。

$ eval $(aws ecr get-login --region us-east-1 --no-include-email --profile username_env)
Run Code Online (Sandbox Code Playgroud)

工作了。


sup*_*ova 6

我只是想发布官方迁移链接,因为我相信如果情况发生变化,它将是最新的:

https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html#cliv2-migration-ecr-get-login

它指出

$(aws ecr get-login --no-include-email)
Run Code Online (Sandbox Code Playgroud)

应替换为

aws ecr get-login-password | docker login --username AWS --password-stdin MY-REGISTRY-URL
Run Code Online (Sandbox Code Playgroud)

这是由于 CLI 中潜在的密码泄露造成的。值得一提的是,您可以从 CLI 版本 1.17.10 迁移到新方法,以便顺利迁移到 2.X


saa*_*aaj 5

刚刚在带有AWS ECR的Linux Mint 18.1(Ubuntu 16.04)和通过最新的Python Docker客户端 2.5.1 使用的最新Docker 17.06.1-ce上出现了相同的问题。登录成功,推送失败。

去除~/.docker/config.json帮助。它仅包含(可能是过时的)授权令牌。

我认为这与底层操作系统无关。就我而言,它以前曾奏效,我唯一能记得的变化是从Ubuntu repo升级docker.io 1.12到Docker repo docker-ce 17.06


Che*_*oor 5

就我而言,问题是 ~/.aws/credentails 中的多个凭证,因此我使用了 --profile

aws ecr get-login --no-include-email --region us-east-2 --profile xxxx
Run Code Online (Sandbox Code Playgroud)

这对我有用。


小智 5

以下步骤对我有用。第一次运行

aws ecr get-login --region us-west-2
Run Code Online (Sandbox Code Playgroud)

你会得到一个输出,它返回:

docker login -u AWS -p AQECAHh....b6Wk -e none 1234567890.dkr.ecr.eu-west-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

现在,从上面的结果中删除“ -e none ”并再次运行命令。

您将能够成功登录。

现在,尝试推送您的 docker 映像,它会起作用!