我正在尝试使用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.
答案 0 :(得分:27)
上述两种解决方案都不适用于我,但我发现当我在ecr login命令中设置区域时,它可以正常工作。
aws ecr get-login --region us-west-2
答案 1 :(得分:18)
最新版本的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://
应该让docker暂时工作。
答案 2 :(得分:18)
您可能只是在运行该命令,而不是将该命令中的echo命令粘贴回终端。容易犯错误。运行后:
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
答案 3 :(得分: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
答案 4 :(得分: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 :(得分:5)
您还收到消息"您的授权令牌已过期"如果你在〜/ .aws / credentials中有多个凭据(路径取决于你的操作系统)而忘记添加--p标志。
使用此命令登录:
aws ecr get-login --region eu-west-1 --p <yourprofilename>
答案 6 :(得分:4)
此答案对我来说适用于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
其中us-west-2是您的区域,而xxxxxxxxxxxxxx是您的帐户ID,位于以下“存储库名称”下面的行的开头:https://us-west-2.console.aws.amazon.com/ecr/create-repository?region=us-west-2
答案 7 :(得分:4)
以下步骤对我有用。首先,运行
aws ecr get-login --region us-west-2
您将获得一个输出,返回:
docker login -u AWS -p AQECAHh....b6Wk -e none 1234567890.dkr.ecr.eu-west-1.amazonaws.com
现在,从上述结果中删除“ -e none ”,然后再次运行命令。
您将能够成功登录。
现在,尝试推送您的docker镜像,它将起作用!
答案 8 :(得分:3)
You need to refresh your authorization token every 12 hours try:
$(aws ecr get-login --no-include-email --region us-east-1)
- change region according to your configuration
答案 9 :(得分: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
它会起作用,你可以推动图像。
答案 10 :(得分: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)
工作了。
答案 11 :(得分:2)
如果您selectRaw("count(gender_id) as count,CASE WHEN gender_id = 1 THEN 'Male' WHEN
gender_id = 2 THEN 'Female' ELSE 'Unknown' END as gender")
对我来说,我有aws-cli/2.0.0
有用的是重新登录。
如果您在aws-cli/2.0.0 Python/3.8.1 Darwin/19.4.0 botocore/2.0.0dev4
上,那么以下内容也可能适用。
aws-cli/2.0.0
答案 12 :(得分:1)
我使用稳定版的docker for mac Version 1.12
我刚刚升级到测试版Version 1.13.0-rc4-beta34.1 (14853)
现在一切正常。
因此,如果有相同问题的人,请确保使用docker for mac 1.13或更高版本,如果尚未发布1.13,请切换到测试版。
答案 13 :(得分:1)
我相信这是当前的格式,假设您正在尝试访问Docker:
Object
答案 14 :(得分:1)
在我的情况下,问题是〜/ .aws / credentails中的多个凭据,所以我使用了--profile
aws ecr get-login --no-include-email --region us-east-2 --profile xxxx
这对我有用。
答案 15 :(得分:1)
警告:aws ecr get-login
似乎无法连接到AWS服务器,即使您有不良的AWS访问/密钥,或者您忘记输入AWS访问/密钥作为环境变量,它似乎也能正常工作。
它仍然会很高兴地为您提供长密码而不会出现错误。然后,您从AWS获得的消息是过期错误,而不是更正确和有用的“授权不正确”。
注意:使用aws-cli版本1.11.112。
答案 16 :(得分:0)
针对此特定错误的另一个解决方案变体是--registry-ids
调用缺少aws ecr get-login
参数。
完整的get-login
调用类似于:
eval "$(aws ecr get-login --no-include-email \
--region us-east-1 \
--registry-ids 11223344 \
)"
请替换您自己的区域和注册表ID值。
答案 17 :(得分:0)
该问题提到login
成功了,但docker push
却失败了。
上述情况的两个可能原因是:
与帐户关联的ECR存储库仅使用那些帐户的凭据
始终确保该操作使用了哪个AWS凭证。
检查环境变量并~/.aws/credentials
进行确认。
答案 18 :(得分:0)
这对我有用。我在Windows上使用Docker。问题似乎出在docker配置上。特别是凭证的存储方式。如果您查看〜/ .docker / config.json,它可能看起来像这样:
{
"auths": {
"XXXX.dkr.ecr.us-east-1.amazonaws.com": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.5 (windows)"
},
"credsStore": "desktop",
"stackOrchestrator": "swarm"
}
如果您删除credStore
行,然后尝试再次登录
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"
}
令人讨厌的是,我每次都必须这样做,因为docker再次添加了credStore
行
答案 19 :(得分:0)
我遇到此错误,因为我有多个配置文件。被标记的个人资料已为我解决:
$(aws ecr get-login --no-include-email --region us-west-2-个人资料 xxxx)
答案 20 :(得分:0)
问题是因为aws ecr get-login命令检索对指定注册表有效12个小时的令牌,然后打印带有该授权令牌的docker login命令,而我们没有执行我们得到的命令回来。
我们需要执行此打印命令以使用Docker登录到您的注册表。就我而言,我正在使用eval执行从aws ecr get-login返回的打印命令,如下所示:
eval $(aws ecr get-login --region eu-west-1 --profile)
答案 21 :(得分:0)
当我尝试从另一个AWS账户中的注册表中推/拉时发生了这种情况。我需要运行带有get-login
标志的--registry-ids
,并传入我要登录的注册表ID。
答案 22 :(得分:0)
在我的情况下,波纹管脚本适用于aws版本aws-cli / 2.0.8
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${aws_account_id}.dkr.ecr.${region}.amazonaws.com
答案 23 :(得分:0)
in
似乎不再受支持。
我不得不改用aws ecr get-login
:
get-login-password
答案 24 :(得分:0)
我只想发布官方迁移链接,因为我相信如果情况发生变化,它将是最新的:
https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html#cliv2-migration-ecr-get-login
它说明
import time, threading
import datetime
def hold():
start = time.time()
while 1:
print(datetime.datetime.now())
# Sleep for 30 secs
time.sleep(30)
# Check if 1 hr over since the start of thread execution
end = time.time()
# Check if 1 hr passed
if(end - start >= 3600):
print(datetime.datetime.now())
break
if __name__ == '__main__':
# Initiating the thread
thread1 = threading.Thread(target=hold)
thread1.start()
thread1.join()
print("Thread execution complete")
应替换为
$(aws ecr get-login -no-include-email)
这是由于CLI中可能暴露密码。值得一提的是,您可以从CLI版本1.17.10迁移到新方法,以顺利迁移到2.X
答案 25 :(得分:0)
对于 AWS CLI 2.0,请使用以下内容
aws ecr get-login-password \
--region <region> \
| docker login \
--username AWS \
--password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
来自https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login-password.html
答案 26 :(得分: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。