Сбой GitLab CI / CD Docker-In-Docker с пользовательской службой DIND

#docker #continuous-integration #gitlab

#docker #непрерывная интеграция #gitlab

Вопрос:

У меня уже некоторое время настроен CI / CD в нашем частном экземпляре GitLab для сборки некоторых пакетов, создания из них образов docker и отправки их в наш внутренний реестр. Конфигурация выглядит следующим образом:

 stages:
  - build

services:
  - docker:18.09.4-dind

image: localregistry/utilities/tools:1.0.5

build:
  stage: build
  script:
    - mvn install
    - docker build -t localregistry/proj/image:$VERSION .
    - docker push localregistry/proj/image:$VERSION
  tags:
    - docker
  

Это работало довольно хорошо вплоть до сегодняшнего дня, когда мы начали сталкиваться с ошибками ограничения скорости из Docker. У нас большая компания, так что это не совсем неожиданно, но это побудило меня взглянуть на локальное кэширование некоторых образов docker, которые мы часто используем. В качестве быстрого теста я извлек, переназначил и перенес в наш локальный реестр docker:18.09.4-dind изображение и изменил строку в конфигурации CI / CD на:

 services:
  - localregistry/utilities/docker:18.09.4-dind
  

К моему удивлению, при запуске задания CI / CD, в то время как изображение, казалось, запускалось нормально, у меня начались проблемы с докером:

 $ docker build -t localregistry/proj/image:$VERSION .
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
  

Следующий час или около того был потрачен на изучение runner и различных сред docker, которые там выполняются, пытаясь выяснить, в чем может быть разница от простого переназначения изображения DIND, но ничего не смог понять; единственное различие, которое можно было найти, это то, что DOCKER_HOST=tcp://docker:2375 было установлено в среде при использовании docker:18.09.4-dind ,но не при использовании localregistry/utilities/docker:18.09.4-dind — хотя его явная настройка не помогла, вызвав это сообщение:

 error during connect: Get http://docker:2375/v1.39/containers/json?all=1: dial tcp: lookup docker on 151.124.118.131:53: no such host
  

За это время ограничение скорости было снято, и я смог вернуться к обычно помеченной версии, но я не вижу причины, по которой локально помеченная версия не будет работать; есть идеи относительно того, почему это так?

Ответ №1:

Я думаю, вся ваша проблема будет решена с использованием alias для вашего нового образа docker dind. Просто замените services раздел следующим:

 services:
  - name: localregistry/utilities/docker:18.09.4-dind
    alias: docker
  

Это приводит к тому, что ваша служба docker daemon (dind) становится доступной под именем docker , которое является именем хоста по умолчанию для docker daemon.

См. Также Расширенные параметры конфигурации docker в GitLab CI для получения более подробной информации.