#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 для получения более подробной информации.