Подключение к docker-in-docker из GitLab CI runner
у меня есть конвейер GitLab, который я хочу:
- создайте приложение Java
- тест с помощью docker-compose
- нажмите на мой репозиторий Docker
основная проблема, с которой я сталкиваюсь, заключается в том, что это работает:
services:
- docker:dind
docker_test:
stage: docker_test
image: docker:latest
script:
- docker version
выход напечатан как ожидалось:
> gitlab-ci-multi-runner exec docker --docker-privileged docker_test
...
$ docker version
Client:
Version: 17.06.0-ce
...
Server:
Version: 17.06.0-ce
...
Build succeeded
при этом не (Пошаговая установка docker-ce
опущен):
services:
- docker:dind
docker_test:
stage: docker_test
image: ubuntu:latest << note change
script:
- docker version
это не с:
$ docker version
Client:
Version: 17.06.0-ce
API version: 1.30
Go version: go1.8.3
Git commit: 02c1d87
Built: Fri Jun 23 21:23:31 2017
OS/Arch: linux/amd64
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
ERROR: Build failed: exit code 1
FATAL: exit code 1
как мне сделать мой ubuntu
image (или какой-либо образ собирается построить мой проект) подключиться к связанной службе Docker-in-Docker? что это docker:latest
делать этого я не буду?
я прочитал на документация по службам GitLab, но это имеет смысл только для меня с точки зрения хоста. (Если у вас есть mysql
сервис, вы можете подключиться через mysql:3306
.)
Edit: обновление команды echo $DOCKER_HOST
и docker:latest
изображение:
$ echo $DOCKER_HOST
tcp://docker:2375
и ubuntu:latest
изображение я вижу:
$ echo $DOCKER_HOST
(nothing - but SO doesn't let me add a blank code line)
2 ответов
в качестве информации, которую вы добавили, я надеюсь, что это сработает:
services:
- docker:dind
docker_test:
stage: docker_test
image: ubuntu:latest
variables:
DOCKER_HOST: "tcp://docker:2375"
script:
- docker version
кроме того:
services:
- docker:dind
docker_test:
stage: docker_test
image: ubuntu:latest
script:
- export DOCKER_HOST=tcp://docker:2375
- docker version
похоже, что Gitlab не устанавливает переменную DOCKER_HOST для пользовательских изображений.
бегуну GitLab CI необходимо смонтировать сокет докера хостов, чтобы возбудить докера в докере. Например:
docker exec gitlab-runner gitlab-runner register \
--non-interactive \
--url https://gitlab.com/ci \
--registration-token TOKEN\
--description "Docker Runner" \
--tag-list "docker" \
--executor docker \
--docker-image "docker:latest" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock
Как видите, докер.носок монтируется здесь как последний параметр. Однако я бы не рекомендовал использовать docker-compose для GitLab CI, так как GitLab CI имеет свой собственный синтаксис https://docs.gitlab.com/ce/ci/docker/using_docker_images.html