Я пытаюсь настроить свой реестр докеров, используя авторизацию gitlab (докеры).
Выполнение docker login registry.website.com
дает мне ошибку 401 Неавторизованный:
Error response from daemon: login attempt to https://registry.website.com/v2/ failed with status: 401 Unauthorized
В журналах докеров нахожу
{ "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-прокси / vhost.d / докер-реестр.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;
Я не вижу, что мне здесь не хватает ...
@VDR Вы правы. Это докажет, что ключ, который я использую, правильный, но почему я получаю ошибку 401?
Вы за прокси?
@JulienLachal Да, обратный прокси nginx
@JulienLachal Я использую jwilder/nginx-proxy
.
Вы нашли что-нибудь об этом @ user3142695? У меня точно такая же проблема, и я понятия не имею, что происходит: '(
@EricD К сожалению, я все еще сталкиваюсь с этой проблемой. Может быть, вы хотите начать за это вознаграждение?
@EricD Удалось ли вам решить вашу проблему?
какая у вас ОС, windows или linux?
@Soleil Linux, убунту
проверьте ваши часы на ваших машинах, те же самые в реестре и запросите
Если ваш Gitlab находится за прокси, вам нужно будет настроить прокси в докере.
Чтобы настроить докер для использования прокси, поместите следующее в файл ~/.docker/config.json
, в котором запущен ваш докер.
{
"auths" : {
},
"proxies":
{
"default":
{
"httpProxy": "http://myproxy/",
"httpsProxy": "http://myproxy/"
}
}
}
Если в разделе "auths": {}
что-то уже есть, оставьте все как есть.
Сохраните этот файл и перезапустите демон Docker. После резервного копирования докера вы сможете без проблем запустить docker login ...
.
Я не понимаю, что мне нужно использовать для myproxy
. Я использую конструктор обратного прокси / nginx-proxy
myproxy
будет доменом прокси, за которым находится ваш Gitlab.
На основании этой ссылки: gitlab.com/gitlab-org/gitlab-ce/blob/8-15-stable/lib/… Предполагается, что этот хэш является большей частью шестнадцатеричного дайджеста открытого ключа sha256 в формате DER (registry-auth.pub.der).