Gitlab-ci docker-in-docker доступ к небезопасному реестру

При настройке gitlab-ci для создания образов докеров и их отправке в небезопасный реестр gitlab я обнаружил несколько ошибок. Мой gitlab-ci.yaml выложен ниже:

stages:
  - build
  - deploy

variables:
  GIT_SUBMODULE_STRATEGY: recursive
  CONTAINER_IMAGE: XXX:$CI_COMMIT_REF_NAME

# The insecure-registry flag 
services:
  - docker:dind

build_container:
  image: docker:latest
  stage: build
  before_script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin

  script:
    - docker build --pull -t $CONTAINER_IMAGE .
    - docker push $CONTAINER_IMAGE

Первая ошибка была:

  $ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN myregistry.gitlab.com
  WARNING! Using --password via the CLI is insecure. Use --password-stdin.
  Warning: failed to get default registry endpoint from daemon (Cannot connect 
  to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon 
  running?). Using system default: https://index.docker.io/v1/
  Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the 
  docker daemon running?

Это было решено обновлением команды входа в систему на

echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" myregistry.gitlab.com --password-stdin

К сожалению, после обновления я обнаружил еще одну ошибку:

$ echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" myregistry.gitlab.com --password-stdin
Error response from daemon: Get https://myregistry.gitlab.com/v2/: dial tcp XX.XX.XXX.XXX:443: getsockopt: connection refused

Как я могу это решить?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
9
0
9 689
1

Ответы 1

Как и при любой другой установке докера, необходимо указать демону докера разрешить подключения к незащищенным реестрам. Чтобы сделать это в контексте службы docker-in-docker, необходимо передать эту конфигурацию службе. Это можно сделать, обновив gitlab-ci.yaml, указав службу как:

services:
  - name: docker:dind
    command: ["--insecure-registry=myregistry.gitlab.com"]

Ты спас мне день. Спасибо

debuti 08.11.2018 10:46

@mcguip знаете ли вы, как использовать переменную среды в этом контексте ($ CI_REGISTRY)?

mathiasfk 18.04.2019 21:56

@mathiasfk, в примере уже используется несколько переменных окружения. Вам нужно что-то более конкретное?

mcguip 19.04.2019 23:26

Я имею в виду использование чего-то вроде command: ["--insecure-registry=$CI_REGISTRY"]. В этом случае контекст принадлежит бегуну, поэтому переменная не видна службе.

mathiasfk 21.04.2019 01:37

Я понимаю. Хороший вопрос; однако у меня нет ответа на этот вопрос, и я не мог найти ничего в документации по докеру. Возможно, вы могли бы поднять отдельный вопрос, поскольку в более общем плане это относится к подстановке переменных в инструкциях команд dockerfile.

mcguip 23.04.2019 08:23

Другие вопросы по теме