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

如何使用访问令牌在Gitlab上推拉Docker镜像并解决双因素认证报错

问题内容

开启双因素认证后向GitLab镜像仓库推送镜像时收到如下报错:

unauthorized: HTTP Basic: Access denied
You must use a personal access token with 'api' scope for Git over HTTP

尝试执行以下命令登录依然提示权限被拒绝:

docker login https://registry.gitlab.com/my_registry -u my_user_name -p my_public_key

请问操作存在什么问题?如何使用公钥完成镜像的推拉操作?

问题解答

操作错误原因

  • SSH公钥仅用于Git SSH协议的权限校验,GitLab容器Registry基于HTTP协议实现,不支持直接将SSH公钥作为登录密码使用,这是你执行登录命令依然失败的核心原因。
  • 开启双因素认证后,所有GitLab HTTP类操作(包括容器Registry登录)都不再支持账号原始密码作为凭证,必须使用对应权限的个人访问令牌。

解决方案

方案1:使用个人访问令牌(推荐,适配所有场景)

  1. 进入GitLab个人设置 - 访问令牌页面,新建个人访问令牌
  2. 勾选read_registry(拉取镜像)、write_registry(推送镜像)权限,按需设置有效期后生成令牌,保存好生成的令牌字符串
  3. 替换原登录命令的密码参数为生成的令牌,重新执行登录:
docker login https://registry.gitlab.com/my_registry -u my_user_name -p 你的个人访问令牌字符串

登录完成后即可正常推拉镜像。

方案2:使用SSH公钥间接完成认证

如果需要复用已配置的SSH公钥完成登录,可通过GitLab提供的SSH接口获取临时认证令牌:

  1. 确保本地SSH公钥已上传到GitLab账号的SSH密钥列表中
  2. 执行命令获取临时令牌:
TOKEN=$(ssh git@gitlab.com registry jwt)
  1. 使用临时令牌登录Registry:
docker login https://registry.gitlab.com/my_registry -u oauth2 -p $TOKEN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:03