J'ai un pipeline GitLab que je veux:
Le principal problème que j'ai est que cela fonctionne :
services:
- docker:dind
docker_test:
stage: docker_test
image: docker:latest
script:
- docker version
La sortie est imprimée comme prévu:
> 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
Bien que cela ne soit pas (étapes d'installation pour docker-ce
omis):
services:
- docker:dind
docker_test:
stage: docker_test
image: ubuntu:latest << note change
script:
- docker version
Il échoue avec:
$ 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
Comment puis-je connecter mon image ubuntu
(ou l'image qui va construire mon projet) au service Docker-in-Docker lié? Qu'est-ce que docker:latest
que je ne suis pas?
J'ai lu la documentation des services GitLab , mais cela n'a de sens pour moi que du point de vue du nom d'hôte. (Si vous disposez d'un service mysql
, vous pouvez vous connecter via mysql:3306
.)
Modifier: Mise à jour de la commande vers echo $DOCKER_Host
, Je vois dans le docker:latest
image:
$ echo $DOCKER_Host
tcp://docker:2375
Et dans le ubuntu:latest
image que je vois:
$ echo $DOCKER_Host
(nothing - but SO doesn't let me add a blank code line)
Comme les informations que vous avez ajoutées, j'espère que cela fonctionne:
services:
- docker:dind
docker_test:
stage: docker_test
image: ubuntu:latest
variables:
DOCKER_Host: "tcp://docker:2375"
script:
- docker version
Alternativement:
services:
- docker:dind
docker_test:
stage: docker_test
image: ubuntu:latest
script:
- export DOCKER_Host=tcp://docker:2375
- docker version
Il semble que Gitlab ne définit pas la variable DOCKER_Host pour les images personnalisées.
Le runner Gitlab CI doit monter le socket docker des hôtes afin d'exécuter le docker dans le docker. Par exemple:
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
Comme vous pouvez le voir, le docker.sock est monté ici comme dernier paramètre. Cependant, je ne recommanderais pas l'utilisation de docker-compose pour Gitlab CI, car Gitlab CI a sa propre syntaxe https://docs.gitlab.com/ce/ci/docker/using_docker_images.html