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

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

  • 我只是运行get-login命令
  • 执行输出(返回login succeeded
  • 然后尝试推docker图像,然后我得到的消息:
    denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.

我不知道出了什么问题,我正在推向正确的回购,我的Mac上的时间是正确的。 这是工作之前,但是,因为我重新安装我的Mac和升级到macOS塞拉利昂它不工作了,所以可能与此有关。

我的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. 

上面的两个解决scheme都没有为我工作,但我发现,当我在Ecrlogin命令设置区域它的工作。

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

最新版本的Docker使用了一个新的凭证存储function,这个function有一个错误 ,那就是用一个指定协议的URL进行docker login会导致令牌过期错误。 这个问题将在Docker 1.13中解决。

目前,解决方法是执行您的login命令,而不指定协议。

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

 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工作暂时。

在使用AWS ECR的Linux Mint 18.1(Ubuntu 16.04)和通过最新的Python Docker客户端 2.5.1使用最新的Docker 17.06.1-ce时,也遇到同样的问题。 login工作,推送失败。

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

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

我正在使用mac Version 1.12的docker的稳定版本

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

所以如果有同样的问题的人,请确保您使用docker为Mac版本1.13或更高版本,如果1.13还没有发布,切换到testing版本。

如果在〜/ .aws / credentials(path取决于你的操作系统)中有多个证书,并且忘记添加–p标志,你还会得到“你的授权令牌已经过期”的消息。

使用此命令获取login名:

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

我知道这个post与MacOS Sierra有关,但是对于那些在Windows上有问题的人,我执行了以下操作:

1) aws ecr get-login,这个命令会输出一个长string

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

2)复制并粘贴上面的行(也许-e都不,所以也删除它) 。 输出将显示警告,然后显示成功:警告! 通过CLI使用–password是不安全的。 使用–password-stdinlogin成功

如果您需要使用安全的方式,请使用–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 

也许这个解决scheme也可以在Mac上运行。