我正在尝试将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论坛上发布了一个答案。在我的案例中,问题是centos“docker”不等同于docker CE,因此失败了:

没有基本认证

我只是通过在centos上安装“docker-ce”来修复。

参考:https://forums.docker.com/t/docker-push-to-ecr-failing-with-no-basic-auth-credentials/17358/30

其他回答

我也遇到过同样的问题,我犯的错误是使用了错误的回购路径

例如:docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest

在上面的路径中,这是我犯的错误:在“dkr.ecr.us-east-1.amazonaws.com”而不是“west”。我用的是“东方”。一旦我纠正了我的错误,我就可以成功地推送图像了。

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

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

在我的情况下,这是一个错误与Docker的Windows和他们的支持Windows凭证管理器。

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

这将导致凭证被写入配置。直接json。之后你需要重新登录。

你可以通过GitHub上的#22910和#24968票来跟踪这个bug。

AWS文档告诉您执行以下命令(对于ap-东南-2区域)

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

当我遇到这个问题时,根据那个文档,我不清楚你需要将这个命令的结果输入到终端并执行它。

修复工作为我是复制的结果到剪贴板与

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

将结果粘贴到命令行并执行

我添加了区域选项,一切都很好为我:

aws ecr get-login --no-include-email --region eu-west-3