从GitLab CI运行器连接到docker-in-docker

Cra*_*tis 16 gitlab docker gitlab-ci docker-in-docker

我有一个我想要的GitLab管道:

  1. 构建Java应用程序
  2. 使用docker-compose进行测试
  3. 推送到我的Docker存储库

我遇到的主要问题是这是有效的:

services:
  - docker:dind

docker_test:
  stage: docker_test
  image: docker:latest
  script:
  - docker version
Run Code Online (Sandbox Code Playgroud)

输出按预期打印:

> 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
Run Code Online (Sandbox Code Playgroud)

虽然这没有(安装步骤docker-ce省略):

services:
  - docker:dind

docker_test:
  stage: docker_test
  image: ubuntu:latest       << note change
  script:
  - docker version
Run Code Online (Sandbox Code Playgroud)

它失败了:

$ 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
Run Code Online (Sandbox Code Playgroud)

如何使我的ubuntu图像(或任何图像构建我的项目)连接到链接的Docker-in-Docker服务?这是docker:latest做什么我不是?

我已经阅读了GitLab服务文档,但从主机名的角度来看它才对我有意义.(如果您有mysql服务,可以连接mysql:3306.)

编辑:更新命令echo $DOCKER_HOST,我在docker:latest图像中看到:

$ echo $DOCKER_HOST
tcp://docker:2375
Run Code Online (Sandbox Code Playgroud)

ubuntu:latest图中我看到:

$ echo $DOCKER_HOST
(nothing - but SO doesn't let me add a blank code line)
Run Code Online (Sandbox Code Playgroud)

Rob*_*ert 19

作为您添加的信息,我希望这确实有效:

services:
  - docker:dind

docker_test:
  stage: docker_test
  image: ubuntu:latest
  variables:
      DOCKER_HOST: "tcp://docker:2375"
  script:
  - docker version
Run Code Online (Sandbox Code Playgroud)

或者:

services:
  - docker:dind

docker_test:
  stage: docker_test
  image: ubuntu:latest 
  script:
  - export DOCKER_HOST=tcp://docker:2375
  - docker version
Run Code Online (Sandbox Code Playgroud)

似乎Gitlab没有为自定义图像设置DOCKER_HOST变量.