我正在尝试将Docker映像推送到Amazon ECR注册表。我正在使用Docker客户端Docker 1.9.1版本build 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"
错误。由于所有流量均已加密,因此我不知道如何开始调试它。
更新
因此,当我意识到问题的根本原因时,我感到有点荷马·辛普森·德奥。我可以访问多个AWS账户。即使我正在使用aws configure
设置存储库的帐户设置凭据,aws cli实际上仍在使用环境变量AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
。因此,当我这样做时,aws ecr get-login
它将返回错误帐户的登录名。我没有注意到帐号是不同的,直到我现在返回尝试一些建议的答案。当我删除环境变量时,一切正常。我想这个故事的座右铭是,如果您遇到此错误,请确保您登录的存储库与您已应用于图像的标记匹配。