You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab Runner(Docker-Machine执行器)拉取镜像时无基础认证凭证报错

解决GitLab Runner(Docker-Machine+DinD)构建镜像时ECR认证失败问题

你遇到的问题是Docker-in-Docker(DinD)模式下的典型认证同步问题:虽然在Runner主机上执行ECR登录显示成功,但构建过程是在DinD容器内的Docker daemon中运行,主机的Docker认证信息不会自动传递到容器里,导致拉取基础镜像时提示无认证凭证。下面是几个可行的解决方法:

  • 在DinD上下文内重新执行ECR登录:
    不要在Runner主机层面执行登录,而是把登录命令放到构建步骤中,确保在DinD容器内执行。修改流水线脚本,将登录命令改为:

    aws ecr get-login --no-include-email --region "${REGION}" | sh
    

    这样认证信息会直接写入DinD容器内的Docker配置文件,构建时就能正常读取。

  • 修复Docker配置文件权限:
    如果Runner配置中已经挂载了主机的/root/.docker目录到DinD容器,需确保登录后的config.json权限正确,执行:

    chmod 600 /root/.docker/config.json
    

    权限过宽会导致Docker拒绝读取认证信息。

  • 确保使用最新ECR凭证:
    ECR临时凭证有效期仅12小时,即使看到登录成功,也可能在构建时已过期。建议将登录命令放在docker build步骤的紧前面,保证使用最新的有效凭证。

  • 验证Runner实例的IAM权限:
    确认Runner所在EC2实例的IAM角色,是否包含ecr:GetAuthorizationToken、ecr:BatchGetImage、ecr:GetDownloadUrlForLayer这些必要权限,权限变更可能导致认证后仍无法拉取镜像。

附上你的执行日志:

$(aws ecr get-login --no-include-email --region "${REGION}")
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
$ IMAGE_TAG="$CI_COMMIT_SHORT_SHA"
$ echo "Building image..."
Building image...
$ docker build  -t $REPOSITORY_URL/"$xxxxxx":latest . -f Dockerfile
Step 1/11 : FROM xxxxxxxx.dkr.ecr.eu-central-1.amazonaws.com/xxxxxxx
Head "https://xxxxxxxx.dkr.ecr.eu-central-1.amazonaws.com/v2/xxxxxxx/manifests/latest": no basic auth credentials
Cleaning up file based variables
00:01
ERROR: Job failed: exit code 1

内容的提问来源于stack exchange,提问作者Lado Golijashvili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 13:48:19