GitLab流水线构建镜像失败,Docker Hub认证报错求助
GitLab流水线Docker镜像构建认证失败修复方案
问题定位
流水线执行docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CONTAINER_REGISTRY时,访问https://registry-1.docker.io/v2/返回unauthorized错误,核心原因是GitLab已弃用Docker Hub注册令牌支持,原有认证机制失效。
可行修复方案
方案1:替换为Docker Hub个人访问令牌(PAT)
- 登录Docker Hub,进入账户设置→安全→新建访问令牌
- 配置令牌名称与权限(拉取镜像需
read权限,推送需write权限) - 生成后复制令牌(仅显示一次,务必保存)
- 在GitLab项目的CI/CD→变量中添加:
DOCKER_HUB_USERNAME:Docker Hub用户名DOCKER_HUB_TOKEN:生成的个人访问令牌,勾选保护变量和掩码变量
- 更新流水线登录命令为:
echo "$DOCKER_HUB_TOKEN" | docker login -u "$DOCKER_HUB_USERNAME" --password-stdin docker.io
方案2:通过GitLab容器仓库代理Docker Hub镜像
- 在GitLab项目/群组的包与注册表→容器注册表中创建代理仓库,目标设为
docker.io,自定义仓库名称(如docker-hub-proxy) - 将流水线中镜像地址从
docker.io/[namespace]/[image]替换为registry.gitlab.com/[your-group]/[your-project]/docker-hub-proxy/[namespace]/[image] - 此方式无需额外登录,GitLab CI_TOKEN会自动完成代理仓库的认证
方案3:移除自定义登录命令(共享Runner场景)
若使用GitLab官方共享Runner,部分Runner已预配置Docker Hub认证,可尝试删除流水线中的docker login步骤,直接执行镜像拉取/构建操作,验证是否正常运行。
验证
修改后触发流水线,检查日志是否输出Login Succeeded,确认镜像构建流程无报错。
内容的提问来源于stack exchange,提问作者Matias Cocciolo
相关产品推荐
相关产品推荐

