Amazon web services Can';t将图像推送到Amazon ECR-失败的原因是;无基本身份验证凭据”;
我正在尝试将docker图像推送到Amazon ECR注册表。我正在使用docker客户端docker版本1.9.1,构建Amazon web services Can';t将图像推送到Amazon ECR-失败的原因是;无基本身份验证凭据”;,amazon-web-services,docker,aws-ecr,Amazon Web Services,Docker,Aws Ecr,我正在尝试将docker图像推送到Amazon ECR注册表。我正在使用docker客户端docker版本1.9.1,构建a34a1d5。我使用aws ecr get login——地区us-east-1获取docker登录凭据。然后,我成功地使用这些凭据登录,如下所示: docker login -u AWS -p XXXX -e none https://####.dkr.ecr.us-east-1.amazonaws.com WARNING: login credentials saved
a34a1d5
。我使用aws ecr get login——地区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用户具有正确的权限。我还确保存储库允许该用户推送到它。为了确保这不是一个问题,我将注册表设置为允许所有用户完全访问。“无基本身份验证凭据”错误不会发生任何更改。我不知道如何开始调试,因为所有的流量都是加密的
更新
所以当我意识到问题的根本原因时,我有了一点荷马·辛普森的灵感。我可以访问多个AWS帐户。即使我使用
aws configure
为我设置存储库的帐户设置凭据,aws cli实际上还是使用了环境变量aws\u ACCESS\u KEY\u ID
和aws\u SECRET\u ACCESS\u KEY
。因此,当我使用aws ecr get login时,它返回了一个错误帐户的登录名。我没有注意到账号是不同的,直到我现在才回去尝试一些建议的答案。当我删除环境变量时,一切都正常工作。我猜故事的格言是,如果您遇到此错误,请确保您登录的存储库与您应用于图像的标记匹配。即使没有打开权限,这也应该有效。请参阅文档:
[编辑:实际上,我在进行第二次测试时也遇到了权限问题。请参阅。]
然而,我也有同样的问题;我不知道为什么,但我成功地使用了文档中描述的更冗长的身份验证机制
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密码”)
注意:My~/.aws/config指定了不同的默认区域,因此我需要显式设置--region us-east-1
以交互方式登录(将更改为您的AWS帐户id):
我也经历过同样的问题
生成新的AWS凭据(访问密钥)并使用新凭据重新配置AWS CLI解决了该问题
早些时候,aws ecr get login——地区us-east-1
生成的docker登录命令带有无效的EC注册表URL。如果您运行$(aws ecr get login——地区us-east-1)
如果您使用配置文件,不要忘记将--profile=XXX
传递到aws ecr get login
在我的情况下,这是Docker for Windows及其对Windows凭据管理器的支持的一个错误
打开~/.docker/config.json
并删除“credstore”:“wincred”
条目
这将导致凭据直接写入config.json
。之后你必须再次登录
您可以通过票证和GitHub跟踪这个bug。我在OSX上也遇到过这个问题。我看到了Oliver Salzburg的回复,并检查了我的~/.docker/config.json。它里面有来自不同AWS帐户的多个授权凭据。我删除了该文件,再次运行get login后,该文件正常工作。AWS文档告诉您执行以下命令(对于ap-Southwest-2区域)
当我遇到这个问题时,根据文档,我不清楚您需要将该命令的结果输入终端并执行它
对我有效的修复方法是用
aws ecr get-login --region ap-southeast-2 | pbcopy
将结果粘贴到命令行并执行它我遇到这个问题的原因不同:我需要推送到与我的AWS帐户(客户端的ECR注册表)无关的注册表。客户端通过添加我的IAM id(例如,arn:aws:IAM::{aws ACCT#}:user/{Username}
)作为主体,在注册表的“权限”选项卡下授予我访问权限。我尝试按常规步骤登录:
$(aws ecr get-login --region us-west-2 --profile profilename)
docker push {Client AWS ACCT #}.dkr.ecr.us-west-1.amazonaws.com/imagename:latest
这当然会导致没有基本的身份验证凭据
aws ecr get login
将您登录到ecr中与您的登录相关联的注册表,这在retrospect中很有意义。解决方案是告诉aws ecr get login您要登录的注册表
$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})
在那之后,docker-push
工作正常
确保已首先创建ECR注册表。
然后按照ECR Push命令说明,剪切并粘贴以下命令
执行docker登录命令(Mac/Linux上的eval跳过剪切和粘贴)
eval$(aws ecr获取登录——美国东部地区-1)
如果使用多个AWS帐户,则添加--配置文件
eval$(aws ecr get login——地区us-east-1——配置您的配置文件)
docker build-t映像名。
docker标签图像名称:latest###############dkr.ecr.us-east-1.amazonaws.com/图像名称:latest
docker push.dkr.ecr.us-east-1.amazonaws.com/image name:latest
如果出现错误,请确保再次运行所有命令!您使用aws ecr get login获得的凭据是临时的,将过期。我也有此问题。发生在我身上的事情是,我忘记运行在运行之后返回给我的命令
aws ecr get-login --region ap-southeast-2
该命令返回一个大blob,其中包括docker login
命令!我没有意识到。它应该返回如下内容:
docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>
docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename
我也面临同样的问题,我犯的错误是使用了错误的回购路径
例如:docker push xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
在上面的路径中,我犯了一个错误:在“d中
$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})
aws ecr get-login --region ap-southeast-2
docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>
docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename
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
eval $(aws ecr get-login --no-include-email | sed 's|https://||')
$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed 's|https://||')
$(AWS_PROFILE=<YOUR PROFILE> aws ecr get-login --no-include-email --region eu-west-1)
eval $(aws ecr get-login --no-include-email --region us-east-1 --profile yourprofile | sed 's|https://||')
Invoke-Expression $(aws ecr get-login --no-include-email)
sudo $(aws ecr get-login --region us-east-1 --no-include-email)
sudo docker tag e9ae3c220b23(image_id) aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app
sudo docker push aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app
{
"credsStore": "ecr-login"
}
Invoke-Expression $(aws ecr get-login --no-include-email)
{
"auths": {
"https://55511155511.dkr.ecr.us-east-1.amazonaws.com": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.5 (darwin)"
},
"credsStore": "osxkeychain"
}
"auths": {
"55511155511.dkr.ecr.us-east-1.amazonaws.com": {}
},
"auths": {
"https://55511155511.dkr.ecr.us-east-1.amazonaws.com": {}
},
sudo docker login -u AWS -p $(aws ecr get-login-password --region <region> -
-profile <profile>) <account id>.dkr.ecr.eu-north-1.amazonaws.com
aws configure
aws ecr get-login-password --region <your region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<your region>.amazonaws.com
(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.<your region>.amazonaws.com
$(aws ecr get-login --region <your region> --no-include-email)
Invoke-Expression -Command (Get-ECRLoginCommand -Region <your region>).Command