我想要一个GitLab管道:
我遇到的主要问题是有效:
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
图像(或任何图像构建我的项目)连接到链接的Docker-in-Docker服务? docker:latest
做什么我不是?
我已经阅读了GitLab services documentation,但从主机名的角度来看,这只对我有意义。 (如果您有mysql
服务,则可以通过mysql:3306
进行连接。)
修改:将命令更新为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)
答案 0 :(得分:16)
根据您添加的信息,我希望这确实有效:
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变量。
答案 1 :(得分:3)
Gitlab CI运行器需要安装主机docker socket才能在docker中执行docker。例如:
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.sock在此处作为最后一个参数安装。但是我不建议使用docker-compose用于Gitlab CI,因为Gitlab CI有自己的语法 https://docs.gitlab.com/ce/ci/docker/using_docker_images.html