Невозможно подключиться к демону Docker в unix: ///var/run/docker.sock в gitlab CI - PullRequest
0 голосов
/ 29 декабря 2018

Я смотрел на любые другие вопросы, но не могу найти свое собственное решение!Я настраиваю CI в gitlab и использую общий бегун gitlab.На этапе сборки я использовал образ докера в качестве базового образа, но когда я использую команду docker, он говорит:

Невозможно подключиться к демону Docker в unix: ///var/run/docker.sock.Работает ли демон-докер?

Я просмотрел эту тему, но все еще не понимаю, что мне делать?

.gitlab-ci.yml:

stages:
  - test
  - build
  - deploy

job_1:
  image: python:3.6
  stage: test
  script:
    - sh ./sh_script/install.sh
    - python manage.py test -k

job_2:
  image: docker:stable
  stage: build
  before_script:
    - docker info
  script:
    - docker build -t my-docker-image .

Я знаю, что бегун gitlab должен зарегистрироваться, чтобы использовать docker и поделиться /var/run/docker.sock!Но как это сделать при использовании собственного бегуна gitlab?

1 Ответ

0 голосов
/ 29 декабря 2018

Ах, это моя любимая тема - использовать docker для gitlab ci.Проблема, с которой вы столкнулись, более известна как docker-in-docker.

Перед ее настройкой вы можете прочитать этот блестящий пост: http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

Это даст вам некоторое представление о том, чтоэто проблема, и какое решение лучше всего подходит вам.Обычно существует 2 основных подхода: фактическая установка docker демона внутри docker и совместное использование демона хоста с контейнерами.Какой подход выбрать - зависит от ваших потребностей.

В gitlab вы можете пойти несколькими путями, я просто поделюсь нашим опытом.

Способ 1 - с помощью docker:dindкак услуга.

Это довольно просто настроить.Просто добавьте docker:dind в качестве общей службы в ваш файл gitlab-ci.yml и используйте изображение docker:latest для своей работы.

image: docker:latest  # this sets default image for jobs
services:
  - docker:dind

Плюсы :

  • прост в настройке.
  • просто для запуска - ваши исходные коды доступны по умолчанию для вашей работы в cwd, потому что они перетаскиваются непосредственно в ваш докер-бегун

Минусы : вы должны настроить реестр Docker для этой службы, в противном случае ваши Dockerfile будут собираться с нуля при каждом запуске конвейера.Что касается меня, это неприемлемо, потому что это может занять более часа в зависимости от количества имеющихся у вас контейнеров.

Способ 2 - совместное использование /var/run/docker.sock хоста docker daemon

Мы настроили нашего собственного исполнителя docker с помощью docker daemon и поделились сокетом, добавив его в файл /etc/gitlab-runner/config.toml.Таким образом, мы сделали демон докера нашей машины доступным docker cli внутри контейнеров. Примечание - вам НЕ нужен привилегированный режим для исполнителя в этом случае.

После этого мы можем использовать и docker и docker-compose в наших пользовательских изображениях докера.Более того, нам не нужен специальный реестр докеров, потому что в этом случае мы разделяем реестр исполнителя между всеми контейнерами.

Минусы

Вам нужно как-то передать источники в ваши контейнеры в этомслучай, потому что вы подключаете их только к исполнителю Docker, но не к контейнерам, запускаемым из него.Мы остановились на клонировании их с помощью команды вроде git clone $CI_REPOSITORY_URL --branch $CI_COMMIT_REF_NAME --single-branch /project

...