AWS EC2实例推送Docker镜像至Docker Hub失败(报错:requested access to the resource is denied)
看起来你遇到的这个权限拒绝问题挺常见的,既然本地能正常推送,那大概率不是Docker Hub仓库本身的问题,咱们从EC2实例这边排查几个关键点:
重新确认Docker登录状态
有时候docker login的会话可能因为超时或者配置问题失效,甚至有可能你在EC2上用了和本地不同的Docker Hub账号。建议先登出再重新登录,确保输入的用户名和密码准确:docker logout docker login也可以检查登录凭据是否正确,查看
~/.docker/config.json文件中的auth字段(该字段是base64编码的,你可以解码后验证是否与你的账号密码匹配)。确保镜像标签完全匹配Docker Hub仓库
你构建镜像时使用的docker build <user_name>/<repo_name>有没有指定标签?如果Docker Hub仓库默认用latest标签,建议重新为镜像打正确的标签,确保标签里的用户名和你登录的Docker Hub账号完全一致(注意大小写,虽然Docker Hub用户名不区分大小写,但标签匹配要严格):docker tag <你的镜像ID> <user_name>/<repo_name>:latest打完标签后再执行推送命令试试。
检查Docker镜像源配置
如果你的EC2实例配置了第三方Docker镜像加速源(比如国内的镜像源),可能会干扰向Docker Hub的推送操作。可以查看/etc/docker/daemon.json文件,若存在非Docker Hub的registry配置,暂时注释掉,然后重启Docker服务:sudo systemctl restart docker重启后重新尝试推送。
排查EC2实例的IAM角色权限(可能性较低)
虽然你已经开放了安全组的全出站规则,但如果EC2实例挂载了IAM角色,且角色中存在禁止访问docker.io的策略,也会导致推送失败。可以查看实例的IAM角色权限,确保没有相关限制。验证Docker Hub仓库权限
虽然你本地能正常推送,但还是可以确认下Docker Hub仓库的权限设置:如果是组织名下的仓库,要确保你登录的账号被添加为仓库的维护者;如果是私有仓库,确认账号拥有推送权限。
小测试
如果以上方法都没解决问题,可以尝试在EC2上拉取一个公开镜像做测试:
docker pull alpine docker tag alpine <user_name>/test-demo:latest docker push <user_name>/test-demo:latest
如果这个测试也失败,说明问题出在EC2实例与Docker Hub的连接或权限配置上;如果成功,那可能是你原来的镜像标签或构建过程有问题。
备注:内容来源于stack exchange,提问作者Langesh

