Docker登录:访问被拒绝,您必须使用个人访问令牌。

18

尝试使用以下命令从 Docker 登录到 GitLab:

sudo docker login registry.gitlab.com?private_token=XXX

但我仍然收到以下错误信息:

Error response from daemon: Get https://registry.gitlab.com/v2/: unauthorized: HTTP Basic: Access denied\nYou must use a personal access token with 'api' scope for Git over HTTP.\nYou can generate one at https://gitlab.com/-/profile/personal_access_tokens

令牌具有正确的访问权限,我进行了双重检查...我对Docker相当新,有什么提示/帮助吗?谢谢!


3个回答

44

正确的命令行(至少在我的情况下有效)是:

docker login registry.example.com -u <your_username> -p <your_personal_access_token>

9
顺便提一下,通常情况下,更好的做法是交互式输入令牌。也就是说,您可以省略命令中的“-p <token>”部分,而是在提示时在STDIN中输入令牌。这样,令牌就不会出现在您的shell历史记录中,也不会在屏幕上显示出来。 - kingsfoil
3
我的用户名是什么鬼?我尝试了 GitLab 的邮件地址和用户名,但都不行。 - CodingTil
1
如果您正在作为CICD管道的一部分进行此操作,则不行。最好使用某种CICD变量(例如GitLab中的变量),然后可以在YML管道配置文件中调用它们。 - rbaleksandar
@kingsfoil 由于某种奇怪的原因,对我来说,以交互方式输入并不起作用,但是使用标志的这种方法却可以。我是复制/粘贴的,所以甚至不可能是打错字。但至少这个方法作为备份起作用了(尽管不安全)。 - undefined

5

是的,我在我的GitLab账户上启用了2FA,这就是为什么我在命令行中使用private_token=XXX的原因。 - Viktor.w
1
在该链接中,有一个关于限制个人访问令牌范围的部分,从您的错误信息来看,似乎您没有API权限。 - Shaqil Ismail
docker login registry.gitlab.com -u <username> -p >personal_access_token> - Alvin

1

根据https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html,实际上您的用户名会被忽略:

尽管需要,但在使用个人访问令牌进行身份验证时,GitLab用户名将被忽略。有一个问题正在跟踪,以使GitLab使用用户名。

因此,如果您无法连接,可能不是因为用户名的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接