从 GitLab CI runner 连接到 docker-in-docker
Connecting to docker-in-docker from a 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
图像(或任何将构建我的项目的图像)连接到链接的 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)
Gitlab CI runner 需要挂载主机 docker 套接字才能在 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 作为最后一个参数挂载在这里。但是我不建议对 Gitlab CI 使用 docker-compose,因为 Gitlab CI 有自己的语法
https://docs.gitlab.com/ce/ci/docker/using_docker_images.html
作为您添加的信息,我希望它能起作用:
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 管道:
- 构建 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
图像(或任何将构建我的项目的图像)连接到链接的 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)
Gitlab CI runner 需要挂载主机 docker 套接字才能在 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 作为最后一个参数挂载在这里。但是我不建议对 Gitlab CI 使用 docker-compose,因为 Gitlab CI 有自己的语法 https://docs.gitlab.com/ce/ci/docker/using_docker_images.html
作为您添加的信息,我希望它能起作用:
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变量