我正在尝试将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.


当前回答

如果您使用概要文件,不要忘记将——profile=XXX传递给aws ecr get-login。

其他回答

在我的情况下(可能在所有情况下),此错误是由于拥有多个AWS帐户造成的。因此,AWS ECR没有使用与AWS帐户关联的正确AWS凭据。

我尝试了这里提到的多种解决方案,但都没有成功。它在使用令牌而不是用户名和密码后工作。我按照这里的说明把它修好了。https://btburnett.com/2017/01/docker-login-for-amazon-aws-ecr-using-windows-powershell.html

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

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

该命令返回一个大blob,其中包括docker登录命令!我没有意识到。它应该返回如下内容:

docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>

复制并粘贴这个命令,然后运行docker push命令,看起来像这样:

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

我也有同样的问题。请按照以下步骤-

aws configure (configure with your credentials) If you have created the ECR repository, in console you can find a button with "view push commands". You get three commands there and will be able to push. Else, here are below three commands. aws ecr get-login-password --region | docker login --username AWS --password-stdin .dkr.ecr.us-west-2.amazonaws.com build your docker image - docker build -t . docker tag :latest .dkr.ecr.us-west-2.amazonaws.com/:latest docker push .dkr.ecr.us-west-2.amazonaws.com/:latest

请注意-在。dkr.ecr.us-west-2.amazonaws.com中,该区域将是您的默认区域。对我来说是我们-西方-2,所以是一样的。

希望这节省了你的时间。

试一试:

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

前推。

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

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