推送Docker镜像到AWS ECR提示no basic auth credentials如何解决
问题根因
执行docker login时使用普通用户身份,登录凭证默认写入当前用户的~/.docker/config.json文件;但执行docker push时添加了sudo切换为root用户,root用户读取的是/root/.docker/config.json文件,该文件不存在对应ECR的登录凭证,因此触发认证错误。
解决方案
方案1:配置普通用户免sudo执行docker命令(推荐)
将当前用户加入docker用户组,后续无需加sudo即可执行所有docker操作:
# 添加当前用户到docker用户组 sudo usermod -aG docker $USER # 刷新用户组配置(或直接退出当前终端重新登录生效) newgrp docker
生效后直接执行推送命令即可:
docker push xxxxxxx.dkr.ecr.us-east-2.amazonaws.com/my-app:1.0
方案2:使用sudo身份执行ECR登录
如果需要保留sudo执行docker命令的习惯,直接在登录命令前添加sudo,将凭证写入root用户的docker配置:
aws ecr get-login-password --region us-east-2 | sudo docker login --username AWS --password-stdin xxxx.dkr.ecr.us-east-2.amazonaws.com
登录成功后再执行sudo推送命令即可。
额外排查点
如果上述方案未解决问题,可逐一检查以下配置:
- 确认登录命令中的ECR仓库地址与push命令中的地址完全一致,核对账号前缀、区域字段是否匹配
- 确认当前使用的AWS身份(访问密钥/IAM角色)具备ECR推送权限,需包含
ecr:PutImage、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload相关权限策略 - 确认AWS CLI配置的默认区域与ECR仓库所在区域一致
内容的提问来源于stack exchange,提问作者Hossam Radwan
相关产品推荐
相关产品推荐

