Ale*_*ney 147 amazon-web-services docker aws-ecr
我正在尝试将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
Run Code Online (Sandbox Code Playgroud)
但是当我尝试推送我的图像时,我收到以下错误:
$ 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
Run Code Online (Sandbox Code Playgroud)
我确保aws用户拥有正确的权限.我还确保存储库允许该用户推送它.为了确保这不是问题,我将注册表设置为允许所有用户完全访问.没有任何更改"无基本身份验证凭据"错误.由于所有流量都已加密,我不知道如何开始调试.
UPDATE
所以当我意识到问题的根本原因时,我有一点荷马辛普森D'哦.我可以访问多个AWS账户.即使我使用aws configure为我设置存储库的帐户设置我的凭据,但aws cli实际上使用的是环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY.因此,当我执行aws ecr get-login时,它返回了错误帐户的登录信息.我没注意到帐号是不同的,直到我现在回去尝试一些建议的答案.当我删除环境变量时,一切正常.我想故事的座右铭是,如果您遇到此错误,请确保您登录的存储库与您应用于图像的标记相匹配.
Ant*_*eno 96
如果你运行$(aws ecr get-login --region us-east-1)
它将全部为你完成
小智 47
由于 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
Jam*_*111 26
我也有这个问题.发生在我身上的事情是我忘记运行我跑完后返回给我的命令
aws ecr get-login --region ap-southeast-2
Run Code Online (Sandbox Code Playgroud)
这个命令返回了一个大blob,其中包含docker login
命令!我没有意识到.它应该返回这样的东西:
docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>
Run Code Online (Sandbox Code Playgroud)
复制并粘贴此命令,然后运行docker push命令,如下所示:
docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename
Run Code Online (Sandbox Code Playgroud)
faz*_*azy 14
即使没有打开权限,这应该可以工作.请参阅文档:私有注册表身份验证.
[编辑:实际上,在进行第二次测试时我也有权限问题.请参阅Docker推送到AWS ECR私有仓库失败并出现格式错误的JSON.)
不过我遇到了同样的问题; 我不知道为什么,但是我成功地使用了文档中描述的更加冗长的auth机制来获取授权令牌
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
Run Code Online (Sandbox Code Playgroud)
获取身份验证令牌('docker password').
aws ecr get-authorization-token --region us-east-1 --output text \
--query authorizationData[].authorizationToken | base64 -d | cut -d: -f2
Run Code Online (Sandbox Code Playgroud)
注意:我的〜/ .aws/config指定了一个不同的默认区域,所以我需要明确设置--region us-east-1
.
以交互方式登录(更改############
为您的AWS账户ID):
docker login -u AWS https://############.dkr.ecr.us-east-1.amazonaws.com/
password: <paste the very long password from above>
email: <I left this blank>
Run Code Online (Sandbox Code Playgroud)
推送图像(假设您已制作泊坞窗图像test
):
docker tag test:latest ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
docker push ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
The push refers to a repository [910732017890.dkr.ecr.us-east-1.amazonaws.com/test] (len: 1)
d5122f58a2e1: Pushed
7bddbca3b908: Pushed
latest: digest: sha256:bc0b521fd398bd1a2ef58a289dcb910334608723fd570e7bddb36eacd0060363 size: 4378
Run Code Online (Sandbox Code Playgroud)
MrM*_*ins 12
试试:
eval $(aws ecr get-login --no-include-email | sed 's|https://||')
Run Code Online (Sandbox Code Playgroud)
在推之前.
Lan*_*ara 11
如果有帮助的话...
我的问题是我必须使用该--profile
选项才能使用凭证文件中的正确配置文件进行身份验证.
接下来,我已经省略了该--region [region_name]
命令,该命令还给出了"无基本身份验证凭据"错误.
我的解决方案是改变我的命令:
aws ecr get-login
对此:
aws --profile [profile_name] ecr get-login --region [region_name]
例:
aws --profile foo ecr get-login --region us-east-1
希望有人帮助!
小智 8
我遇到了同样的问题.
生成新的AWS凭据(访问密钥)并使用新凭据重新配置AWS CLI解决了该问题.
之前,aws ecr get-login --region us-east-1
生成的docker login命令包含无效的EC注册表URL.
Windows上的wincred凭证管理器中存在一个已知错误.从生成的登录命令中删除"https://"解决了这个问题.
docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
代替
docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
另请参阅故障排除页面.
Docker CLI 不支持本机 IAM 身份验证方法。要对Docker 推送和拉取请求进行身份验证和授权,请按照此步骤操作。
步骤1
检查 aws 凭证配置是否正确。要配置 AWS 凭证,请运行以下命令并提供您的 aws 凭证。
aws configure
Run Code Online (Sandbox Code Playgroud)
第2步
您可以使用 get-login-password 对 Amazon ECR 私有注册表进行 Docker 身份验证(推荐)
Linux 和 MSC
aws ecr get-login-password --region <your region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<your region>.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
用于窗户
(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.<your region>.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
或者
您还可以使用 --get-login 方法(但公开凭据)(不推荐)。
适用于 Linux 和 Mac
$(aws ecr get-login --region <your region> --no-include-email)
Run Code Online (Sandbox Code Playgroud)
用于窗户
Invoke-Expression -Command (Get-ECRLoginCommand -Region <your region>).Command
Run Code Online (Sandbox Code Playgroud)
如果您登录成功,那么您就可以开始了。否则请参阅aws 文档以获取错误
步骤 - 3
标记您的图像
docker 标签 <aws_account_id>.dkr.ecr..amazonaws.com/my-web-app
使用以下命令推送您的图像。
docker Push <aws_account_id>.dkr.ecr..amazonaws.com/my-web-app
注意:这是基于令牌的登录,生成的授权令牌仅在 12H 内有效
在的Windows在PowerShell中,使用:
Invoke-Expression $(aws ecr get-login --no-include-email)
Run Code Online (Sandbox Code Playgroud)
我遇到此问题的原因不同:我需要推送到与我的 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
Run Code Online (Sandbox Code Playgroud)
这当然导致了no basic auth credentials
。 事实证明,aws ecr get-login
将您登录到与您的登录相关联的注册表的 ECR ,回想起来是有道理的。解决方案是告诉aws ecr get-login
您要登录哪个注册表。
$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})
Run Code Online (Sandbox Code Playgroud)
之后,docker push
工作得很好。
eval $(aws ecr get-login --region us-east-1)
eval $(aws ecr get-login --region us-east-1 --profile your-profile)
docker build -t image-name .
docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
docker push ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
如果出现错误,请确保再次运行所有命令!您使用的凭据aws ecr get-login
是临时的,将过期.
在我的情况下,运行后aws ecr get-login --no-include-email --region *****
,我只复制了格式为的命令输出docker login -u *** -p ************
,然后将其粘贴到提示中。继续推进。
刚刚有一个更新,从 AWS 中删除了 get-login,而是使用 get-login-password:
sudo docker login -u AWS -p $(aws ecr get-login-password --region <region> -
-profile <profile>) <account id>.dkr.ecr.eu-north-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
如果使用默认凭据,请不要忘记删除 --profile 标志
归档时间: |
|
查看次数: |
62270 次 |
最近记录: |