当前位置:  开发笔记 > 编程语言 > 正文

无法将图像推送到Amazon ECR - 无法使用"无基本身份验证凭据"

如何解决《无法将图像推送到AmazonECR-无法使用"无基本身份验证凭据"》经验,为你挑选了11个好方法。

我正在尝试将docker镜像推送到Amazon ECR注册表.我正在使用docker客户端Docker版本1.9.1,构建a34a1d5.我使用"aws ecr get-login --region us-east-1"来获取docker登录信息.然后,我成功登录这些信用如下:

docker login -u AWS -p XXXX -e none https://####.dkr.ecr.us-east-1.amazonaws.com
WARNING: login credentials saved in /Users/ar/.docker/config.json
Login Succeeded

但是当我尝试推送我的图像时,我收到以下错误:

$ docker push ####.dkr.ecr.us-east-1.amazonaws.com/image:latest
The push refers to a repository [####.dkr.ecr.us-east-1.amazonaws.com/image] (len: 1)
bcff5e7e3c7c: Preparing 
Post https://####.dkr.ecr.us-east-1.amazonaws.com/v2/image/blobs/uploads/: no basic auth credentials

我确保aws用户拥有正确的权限.我还确保存储库允许该用户推送它.为了确保这不是问题,我将注册表设置为允许所有用户完全访问.没有任何更改"无基本身份验证凭据"错误.由于所有流量都已加密,我不知道如何开始调试.

UPDATE

所以当我意识到问题的根本原因时,我有一点荷马辛普森D'哦.我可以访问多个AWS账户.即使我使用aws configure为我设置存储库的帐户设置我的凭据,但aws cli实际上使用的是环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY.因此,当我执行aws ecr get-login时,它返回了错误帐户的登录信息.我没注意到帐号是不同的,直到我现在回去尝试一些建议的答案.当我删除环境变量时,一切正常.我想故事的座右铭是,如果您遇到此错误,请确保您登录的存储库与您应用于图像的标记相匹配.



1> Antonio Terr..:

如果你运行$(aws ecr get-login --region us-east-1)它将全部为你完成


如果你得到"未知的速记标志:'e'",你必须运行带有--no-include-email标志的命令,如下所示:$(aws ecr get-login --region us-east-1 - 没有包括电子邮件)
你是个传奇人物.除了步骤2之外,AWS指南还有5个步骤,所有步骤都是shell命令,只执行"运行上一步中返回的docker login命令".我想像我这样的一大堆人只关注shell命令而没有正确阅读指令
@VtoCorleone因为aws命令只是将docker命令打印到标准输出.如果你将该字符串包装在$()中,它将由shell解释,并且将运行`docker login`命令.
$(aws ecr get-login --region us-west-2)未知速记标志:-e中的“ e”,请参阅“ docker login --help”。

2> Der Hochstap..:

在我的例子中,这是Docker for Windows的一个错误,它们支持Windows Credential Manager.

打开~/.docker/config.json并删除"credsStore": "wincred"条目.

这将导致凭证config.json直接写入.之后你必须再次登录.

您可以通过GitHub上的#22910和#24968门票跟踪此错误.



3> Greg..:

如果您使用配置文件,请不要忘记传递--profile=XXXaws ecr get-login.



4> James111..:

我也有这个问题.发生在我身上的事情是我忘记运行我跑完后返回给我的命令

aws ecr get-login --region ap-southeast-2

这个命令返回了一个大blob,其中包含docker login命令!我没有意识到.它应该返回这样的东西:

docker login -u AWS -p  -e none 

复制并粘贴此命令,然后运行docker push命令,如下所示:

docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename


完全一样。我是经过一番思考才发现的。

5> fazy..:

即使没有打开权限,这应该可以工作.请参阅文档:私有注册表身份验证.

[编辑:实际上,在进行第二次测试时我也有权限问题.请参阅Docker推送到AWS ECR私有仓库失败并出现格式错误的JSON.)

不过我遇到了同样的问题; 我不知道为什么,但是我成功地使用了文档中描述的更加冗长的auth机制来获取授权令牌

AWS CLI和Docker版本:

$ aws --version
aws-cli/1.9.17 Python/2.7.6 Linux/3.16.0-38-generic botocore/1.3.17
$ docker --version
Docker version 1.9.1, build a34a1d5

获取身份验证令牌('docker password').

aws ecr get-authorization-token --region us-east-1 --output text \
    --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2

注意:我的〜/ .aws/config指定了一个不同的默认区域,所以我需要明确设置--region us-east-1.

以交互方式登录(更改############为您的AWS账户ID):

docker login -u AWS https://############.dkr.ecr.us-east-1.amazonaws.com/
password: 
email: 

推送图像(假设您已制作泊坞窗图像test):

docker tag test:latest ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
docker push ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
The push refers to a repository [910732017890.dkr.ecr.us-east-1.amazonaws.com/test] (len: 1)
d5122f58a2e1: Pushed 
7bddbca3b908: Pushed 
latest: digest: sha256:bc0b521fd398bd1a2ef58a289dcb910334608723fd570e7bddb36eacd0060363 size: 4378



6> MrMins..:

试试:

eval $(aws ecr get-login --no-include-email | sed 's|https://||')

在推之前.



7> Lansana Cama..:

如果有帮助的话...

我的问题是我必须使用该--profile选项才能使用凭证文件中的正确配置文件进行身份验证.

接下来,我已经省略了该--region [region_name]命令,该命令还给出了"无基本身份验证凭据"错误.

我的解决方案是改变我的命令:

aws ecr get-login

对此:

aws --profile [profile_name] ecr get-login --region [region_name]

例:

aws --profile foo ecr get-login --region us-east-1

希望有人帮助!



8> 小智..:

我遇到了同样的问题.

生成新的AWS凭据(访问密钥)并使用新凭据重新配置AWS CLI解决了该问题.

之前,aws ecr get-login --region us-east-1生成的docker login命令包含无效的EC注册表URL.



9> Tom Rijntjes..:

Windows上的wincred凭证管理器中存在一个已知错误.从生成的登录命令中删除"https://"解决了这个问题.

docker login -u AWS -p  .dkr.ecr..amazonaws.com

代替

docker login -u AWS -p  https://.dkr.ecr..amazonaws.com

另请参阅故障排除页面.



10> Jason..:

    确保首先创建了ECR注册表.
    然后根据ECR推送命令指令,剪切并粘贴以下命令


    eval $(aws ecr get-login --region us-east-1)
    如果您使用多个AWS账户,执行docker login命令(在Mac/Linux上的eval跳过剪切和粘贴)add --profile
    eval $(aws ecr get-login --region us-east-1 --profile your-profile)

    docker build -t image-name .

    docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest

    docker push ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest

如果出现错误,请确保再次运行所有命令!您使用的凭据aws ecr get-login是临时的,将过期.



11> Julien Nyamb..:

在我的情况下,运行后aws ecr get-login --no-include-email --region *****,我只复制了格式为的命令输出docker login -u *** -p ************,然后将其粘贴到提示中。继续推进。

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有