我正在尝试使用gitlab(docker)的auth配置我的docker注册表。
执行docker login registry.website.com
会给我一个 401未经授权错误:
Error response from daemon: login attempt to https://registry.website.com/v2/ failed with status: 401 Unauthorized
在我发现的docker日志中
{ "level":"info","msg":"token signed by untrusted key with ID: \"IWNY:KT2H:YUN5:STQP:22LM:YNIU:RT4T:AZO7:TBVL:ZQ3I:Z4JZ:LA3T\"","time":"2018-12-17T23:36:03.538232467Z" }
{ [...] "level":"warning","msg":"error authorizing context: invalid token","service":"registry","source":"registry","time":"2018-12-17T23:36:03.53860308Z","version":"v2.6.2" }
我的密钥是通过这样做生成的
$ sudo openssl req -new -newkey rsa:4096 -subj "/CN=gitlab-issuer" -nodes -x509 -keyout registry-auth.key -out registry-auth.crt
$ sudo chmod 400 registry-auth.key
在调试尝试中,我确实得到了不同的sha256摘要:
459b854f47c51bd94e0fd696cc35148cf93065df986abcc368cf13958373d298
459b854f47c51bd94e0fd696cc35148cf93065df986abcc368cf13958373
如@VDR所示,这是可以的,因为使用了前30个字符。因此,键应该没有问题。但是为什么会出现401错误?
这是我配置gitlab和注册表的方式:
docker gitlab(gitlab.rb)的配置使用密钥为
gitlab_rails['registry_key_path'] = "/certs/registry-auth.key"
注册表配置具有
auth.token.rootcertbundle: /root/certs/registry-auth.crt
nginx-proxy / vhost.d / docker-registry.conf
proxy_pass http://registry.website.com;
proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
我看不到我在这里想念的东西...
答案 0 :(得分:0)
如果您的Gitlab位于代理之后,则需要在docker中配置代理。
要将docker配置为使用代理,请将以下内容放入运行docker的~/.docker/config.json
文件中。
{
"auths" : {
},
"proxies":
{
"default":
{
"httpProxy": "http://myproxy/",
"httpsProxy": "http://myproxy/"
}
}
}
如果"auths": {}
部分中已有任何内容,则应保持原样。
保存此文件,然后重新启动docker守护程序。 docker备份后,您应该可以运行docker login ...
而不会出现问题。