无法将ASP.NET容器镜像推送至AWS ECR问题排查求助
可能的问题原因如下:
- Docker 客户端与服务端版本不兼容
你配置的job镜像为docker:stable(对应较新的docker版本),但使用的dind服务是旧的docker:18.09.7-dind,两者API版本不匹配会导致镜像推送时出现未知错误。建议将job镜像和dind服务统一为相同版本,例如都使用docker:20.10.23对应版本。 - ECR 登录命令已废弃
你使用的aws ecr get-login命令早已被AWS官方弃用,旧命令返回的认证信息经常出现失效、格式错误的问题,导致push时认证失败。替换为新版登录命令即可:aws ecr get-login-password --region eu-west-2 | docker login --username AWS --password-stdin $ECR_DEV_REPOSITORY_URL - IAM 权限配置缺失/错误
常见的权限配置问题有两类:- 必须单独配置
ecr:GetAuthorizationToken权限,且该权限的资源必须指定为*,不能绑定具体ECR仓库ARN,否则会直接认证失败 - 缺少ECR仓库对应推送权限:需要给IAM用户添加目标仓库的
ecr:BatchCheckLayerAvailability、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload、ecr:PutImage权限
- 必须单独配置
- DOCKER_HOST 配置缺失
你把DOCKER_HOST的配置注释掉了,旧版本dind服务默认需要显式指定客户端连接地址为tcp://docker:2375(注意不是localhost,dind服务的默认主机名为docker),未配置的情况下docker客户端无法连接到dind服务,会导致推送失败。 - 环境变量配置错误
请确认GitLab CI/CD变量中配置的$ECR_DEV_REPOSITORY_URL格式正确,正确格式为<AWS账号ID>.dkr.ecr.eu-west-2.amazonaws.com/<你的ECR仓库名>,不存在拼写错误、多余符号等问题。
内容的提问来源于stack exchange,提问作者Eugene Sukh
相关产品推荐
相关产品推荐

