GitLab CI - не удается подключиться к демону Docker из образа

У меня есть проект на основе узлов, и следующие первые шаги, которые должны быть выполнены как часть сборки:

npm install
npm run build
docker build -t client .

Последняя команда выше строит следующий Dockerfile:

FROM docker.artifactory.abc.net/nginx
COPY build /usr/share/nginx/html
COPY default.conf /etc/nginx/conf.d/default.conf

Содержание .gitlab-ci.yml:

image: docker.artifactory.abc.net/docker/node:1.0

stages:
   - build
   - deploy

build:
   stage: build
   script:
   - npm install
   - npm run build
   - docker build -t client .

В приведенном выше Dockerfile я использую пользовательский образ узла (node:1.0) который содержит настройки прокси для apk для работы и конфигурации Artifactory, чтобы все зависимости выбирались с помощью Artifactory. Теперь, когда я запускал эту сборку, я получал docker: command not found ошибка при выполнении последней команды (docker build -t client .), что ожидается, потому что базовое изображение для node и не содержит docker, Поэтому я добавил инструкции по настройке docker для узла Dockerfile, основываясь на этой ссылке, за исключением последних 3 строк, где он настраивает ENTRYPOINT и CMD.

Теперь, когда я запустил сборку, я получил:

$ docker build -t client .
Sending build context to Docker daemon  372.7MB

Step 1 : FROM docker.artifactory.abc.net/nginx
Get https://docker.artifactory.abc.net/v2/nginx/manifests/latest: unknown: Authentication is required
ERROR: Job failed: exit code 1

Эта ошибка, согласно моему прошлому опыту, была связана с запуском docker login команда. Поскольку в настройке докера в официальном образе используется tar, мне пришлось добавить docker пользователь к /etc/group а затем добавить текущего пользователя (root) в docker группа. Также добавил docker login команда, как показано ниже в Dockerfile:

    addgroup docker; \
    adduser root docker; \
    docker login docker.artifactory.abc.net -u svc-art -p "ZTg6#&kq"; \

После этого, если я пытаюсь создать этот Dockerfile, я получаю следующую ошибку:

+ dockerd -v
Docker version 17.05.0-ce, build v17.05.0-ce
+ docker -v
Docker version 17.05.0-ce, build v17.05.0-ce
+ adduser root docker
+ tail -2 /etc/group
node:x:1000:node
docker:x:101:root
+ docker login docker.artifactory.abc.net -u svc-art -p ZTg6#&kq
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?

Я также сделал ls -ltr /var/run/docker.sock; и файл сокета докера не присутствовал в изображении. Кажется, это проблема.

Любая идея, как я могу заставить это работать?

1 ответ

Решение

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

Ваш конвейер должен выглядеть примерно так:

 image: docker.artifactory.abc.net/docker/node:1.0

 stages:
    - build
    - deploy

 build:
   image: docker:latest
   services:
   - docker:dind
   stage: build
   script:
     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.example.com
     - docker build -t registry.example.com/group/project/image:latest .
     - docker push registry.example.com/group/project/image:latest

Вы также можете найти больше информации здесь

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