gitlab docker executor при логине в репозиторий выдает ошибку X509

Есть ci в docker executor'е c использованием docker-dind на gitlab:

docker-build-job:
   stage: build
   image: docker:20.10.6
   scripts:
      - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.our.ru

config.toml:

[runners.docker]
    image = "docker:20.10.6"
    tls_verify = false
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/certs/client",  "/usr/share/ca-certificates:/certs"]
    shm_size = 0
  [[runners.docker.services]]
    alias = "docker"
    name = "docker:20.10.12-dind"
    volumes = ["/cache", "/certs/client", "/etc/gitlab-runner/certs:/certs/ca:ro"]
    command = ['/bin/sh', '-c', 'ls -alh /certs/client && dockerd-entrypoint.sh || exit']

Подскажите, пожалуйста:

  1. В файле config.toml в секции runners.docker.services указан docker:20.10.12-dind. Правильно ли я понимая , что в данном случае скрипты всех джобов будут выполняться внутри контейнера dind, независимо от того указываю ли я инструкцию services: docker:19.03.12-dind в джобе ci (файл .gitlab-ci.yml)? т.е. запись про service в config.toml автоматически подключает dind контейнер?

  2. В dind контейнере выполняется команда login к развернутому на другой машине registry следующем образом:

- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.our.ru

При этом возникает ошибка Error response from daemon: Get "https://registry.our.ru/v2/": x509: certificate signed by unknown authority

При этом если я выполняю команду openssl s_client -showcerts -connect registry.our.ru:443 я получаю ответ с фразой Verification: OK. Понимаю так , что сертификаты используются верные. С машины, на которой установлен gitlab-runner я могу залогиниться к registry.

Вопрос: что я делаю не так?

  1. в файле настроек docker registry есть следующая запись:
auth:
  token:
    realm: https://gitlab.our.ru/jwt/auth
    service: container_registry
    issuer: omnibus-gitlab-issuer
    rootcertbundle: /etc/docker/registry/ssl/gitlab-registry.crt

Правильно ли я понимаю, что $CI_BUILD_TOKEN участвует в создании сертификата? Где должен распологаться этот сертификат в контейнере dind? этот сертификат проверяется корневым сертикатом, расположенным по пути /etc/docker/registry/ssl/gitlab-registry.crt?

Всем заранее спасибо за ответы!


Ответы (0 шт):