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
Вы также можете найти больше информации здесь