GitLab CI runner не может подключиться к unix:// / var / run / docker.носок в kubernetes

GitLab работает в кластере kubernetes. Runner не может создавать изображение docker с артефактами сборки. Я уже пробовал несколько подходов, чтобы исправить это, но не повезло. Вот некоторые фрагменты конфигурации:

.gitlab-ci.в формате YML

image: docker:latest
services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay

stages:
  - build
  - package
  - deploy

maven-build:
  image: maven:3-jdk-8
  stage: build
  script: "mvn package -B --settings settings.xml"
  artifacts:
    paths:
      - target/*.jar

docker-build:
  stage: package
  script:
  - docker build -t gitlab.my.com/group/app .
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN gitlab.my.com/group/app
  - docker push gitlab.my.com/group/app

конфиг.томл

concurrent = 1
check_interval = 0

[[runners]]
  name = "app"
  url = "https://gitlab.my.com/ci"
  token = "xxxxxxxx"
  executor = "kubernetes"
  [runners.kubernetes]
    privileged = true
    disable_cache = true

этап пакете:

running with gitlab-ci-multi-runner 1.11.1 (a67a225)
  on app runner (6265c5)
Using Kubernetes namespace: default
Using Kubernetes executor with image docker:latest ...
Waiting for pod default/runner-6265c5-project-4-concurrent-0h9lg9 to be running, status is Pending
Waiting for pod default/runner-6265c5-project-4-concurrent-0h9lg9 to be running, status is Pending
Running on runner-6265c5-project-4-concurrent-0h9lg9 via gitlab-runner-3748496643-k31tf...
Cloning repository...
Cloning into '/group/app'...
Checking out 10d5a680 as master...
Skipping Git submodules setup
Downloading artifacts for maven-build (61)...
Downloading artifacts from coordinator... ok        id=61 responseStatus=200 OK token=ciihgfd3W
$ docker build -t gitlab.my.com/group/app .
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
ERROR: Job failed: error executing remote command: command terminated with non-zero exit code: Error executing in Docker Container: 1

что я делаю не так?

2 ответов


не нужно использовать это:

DOCKER_DRIVER: overlay

потому что кажется, что наложение не поддерживается, поэтому контейнер svc-0 не может начать с него:

$ kubectl logs -f `kubectl get pod |awk '/^runner/{print }'` -c svc-0
time="2017-03-20T11:19:01.954769661Z" level=warning msg="[!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING [!]"
time="2017-03-20T11:19:01.955720778Z" level=info msg="libcontainerd: new containerd process, pid: 20"
time="2017-03-20T11:19:02.958659668Z" level=error msg="'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded."

и export DOCKER_HOST="tcp://localhost:2375" докеру-build:

 docker-build:
  stage: package
  script:
  - export DOCKER_HOST="tcp://localhost:2375"
  - docker build -t gitlab.my.com/group/app .
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN gitlab.my.com/group/app
  - docker push gitlab.my.com/group/app

при использовании Kubernetes вам нужно настроить образ сборки для подключения к движку Docker.

добавить в изображение сборки:

DOCKER_HOST=tcp://localhost:2375

цитата из документов:

запуск docker:dind также известен как изображение docker-in-docker также возможно, но, к сожалению, контейнеры должны запускаться в привилегированном режиме. Если вы готовы пойти на этот риск, возникнут другие проблемы, которые могут не возникнуть кажутся такими же прямыми на первый взгляд. Потому что демон docker запущен как услуга обычно в вашем .gitlab-ci.yaml будет работать как отдельный контейнер в вашем отсеке. В основном контейнеры в pods только разделяют назначенные Тома к ним и IP-адрес, по которому они могут связаться друг с другом с помощью localhost. /var / run / docker.носок не является общим для контейнера docker:dind и docker бинарные пытается использовать его по умолчанию. Чтобы перезаписать это и заставить клиента использовать tcp чтобы связаться с демоном docker в другом контейнере, обязательно включать DOCKER_HOST=tcp: / / localhost: 2375 в переменных среды контейнера сборки.

Gitlab-CI на Kubernetes