我正在尝试将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用户具有正确的权限。我还确保存储库允许用户推送到它。为了确保这不是一个问题,我将注册表设置为允许所有用户完全访问。没有什么可以改变“no basic auth credentials”错误。我不知道如何开始调试,因为所有的流量都是加密的。

更新

So I had a bit of Homer Simpson D'Oh moment when I realized the root cause of my problem. I have access to multiple AWS accounts. Even though I was using aws configure to set my credentials for the account where I had setup my repository the aws cli was actually using the environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY. So when I did aws ecr get-login it was returning a login for the wrong account. I failed to notice that the account numbers were different until I just went back now to try some of the proposed answers. When I remove the environment variables everything works correctly. I guess the motto of the story is if you hit this error, make sure that the repository you are logging into matches the tag you have applied to the image.


当前回答

这个错误消息来自docker,它不一定与AWS有关,因为我在不使用AWS时也得到了相同的错误…它只是说docker没有从它碰巧使用的任何认证源获得授权

在我的例子中,在测试中我删除了目录~/。Docker得到了这个错误…在我反弹了我的本地docker注册表后,docker push就没问题了

其他回答

如果你运行$(aws ecr get-login——region us-east-1),一切都会为你完成

2021年7月更新:

在AWS CLI的版本1中,get-login现在已弃用。如果您正在使用AWS CLI的版本2,则必须使用get-login-password。

您可以将get-login-password的输出输出到docker登录命令,以验证docker到您的ECR注册表:

aws ecr get-login-password | docker login --username AWS --password-stdin ####.dkr.ecr.us-east-1.amazonaws.com

现在你应该能够docker推送,并让它直接进入你的ECR注册表。

在Windows上的wincred凭证管理器中有一个已知的错误。从生成的登录命令中删除'https://'可以解决这个问题。

docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com

而不是

docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com

请参见故障排除页面。

我也经历过同样的问题。

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

之前,aws ecr get-login——region us-east-1生成的docker登录命令带有无效的EC注册中心URL。

更新

由于AWS CLI版本2 - AWS ecr get-login已弃用,正确的方法是AWS ecr get-login-password。

因此,正确的最新答案如下: docker login -u AWS -p $(AWS ecr get-login-password——region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com

aws ecr get-login --region us-west-1 --no-include-email

这个命令给了我正确的登录命令。如果你不使用“——no-include-email”,它将抛出另一个错误。上面命令的输出看起来像这个docker login -u AWS -p **********************very big******。复制并执行它。现在会显示“Login Succeeded”。现在您可以将映像推到ECR。

确保您的AMI规则具有您尝试登录的用户的权限。