Gitlab CE: как настроить реестр Docker - PullRequest
0 голосов
/ 19 сентября 2019

Я схожу с ума, пытаясь запустить локальный экземпляр Gitlab CE omnibus с его реестром Docker и самозаверяющими сертификатами.

Я создал сертификат, ключ, сеть Docker и установил Gitlab изОбраз Docker, подобный этому:

docker run --hostname gitlab \
           --name gitlab \
           --net-alias=gitlab \
           --detach \
           --restart always \
           --net gitlabnetwork \
           --ip 172.50.0.10 \
           --publish 4443:443 \
           --publish 5005:5005 \
           --volume /tmp/gitlabConfig/:/etc/gitlab \
           --volume /tmp/gitlabLogs/:/var/log/gitlab \
           --volume /tmp/gitlabData/:/var/opt/gitlab \
           gitlab/gitlab-ce

Я добавил запись в / etc / hosts так:

127.0.0.1 gitlab

Gitlab, кажется, хорошо работает на https://gitlab:4443, всехорошо, используя графический интерфейс.Но я не могу добраться до реестра.Во время входа в систему отображается следующее сообщение об ошибке:

$ docker login https://gitlab:5005
Error response from daemon: Get https://gitlab:5005/v2/: Get https://gitlab/jwt/auth?account=root&client_id=docker&offline_token=true&service=container_registry: dial tcp 127.0.0.0.1:443: connect: connection refused

Тот же результат, что и при входе в Docker https://127.0.0.1:5005

gitlab_registry_access.log регистрирует это:

172.50.0.1 - - [19/Sep/2019:15:41:17 +0000] "GET /v2/ HTTP/1.1" 401 87 "" "docker/18.09.7 go/go1.10.1 git-commit/2d0083d kernel/4.15.0-62-generic os/linux arch/amd64 UpstreamClient(Docker-Client/18.09.7 \x5C(linux\x5C))"

Вот параметры файла gitlab.rb:

external_url 'https://gitlab'
registry_external_url 'https://gitlab:5005'
registry_nginx['enable'] = true
registry_nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.crt'
registry_nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.key'
registry_nginx['listen_port'] = '5005'
registry_nginx['listen_https'] = true

Я прочитал и перечитал документ, я не вижу, как из него выйти.Любая помощь приветствуется.

ОБНОВЛЕНИЕ:

Движение вперед.Я думаю, что проблема связана с конфигурацией в файле /var/opt/gitlab/registry/config.yml:

auth:
  token:
    realm: https://gitlab/jwt/auth
    ...

Кажется, что это не принимать во внимание пользовательский порт.Я думаю, что это должно быть

   realm: https://gitlab:4443/jwt/auth

Я пытался редактировать его вручную, но переназначение gitlab-ctl перезаписывает его ...

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Хорошо, это решено!

Проблема четко упоминается здесь: https://gitlab.com/gitlab-org/gitlab-foss/issues/22707 и здесь: Докер Gitlab и external_url

Проблема в том, чтоэто внутренний адрес, который используется на этапе аутентификации реестра.

В моем случае клиент Docker пытался подключиться к API аутентификации через порт 443, недоступный, поскольку контейнер был доступен через порт 4443 (сопоставлен с443).

Вывод: порт external_url и порт прослушивания контейнера должны совпадать.

Я изменил gitlab.rb следующим образом (другие настройки registry_nginx не нужны):

external_url "https://gitlab:4443
registry_external_url "https://gitlab:5005

Что касается начала контейнера:

--publish 4443:4443
0 голосов
/ 19 сентября 2019

Возможно, проблема в самоподписанном сертификате

https://docs.docker.com/registry/insecure/#use-self-signed-certificates

Вам необходимо создать копию сертификата, чтобы Docker доверял ему.Скопируйте его в /etc/docker/certs.d/gitlab:5005/ca.crt на хосте Docker.

Некоторое время мне не приходилось это делать, но я, кажется, немного помнилхитро, прежде чем мы, наконец, заработали.Убедитесь, что нужный файл скопирован в нужное место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...