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

标签 docker gitlab 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

按预期打印输出:

> 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)

最佳答案

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

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 变量。

关于docker - 从 GitLab CI 运行器连接到 docker-in-docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45316098/

相关文章:

reactjs - 在 gitlab 运行器上使用 asar 构建的 React Electron 应用程序会创建 JavaScript 错误

git - 获取 fatal error : . git/info/refs 无效 : is this a git repository?

Python-gitlab API V4

git - 在 Docker 中使用私有(private) gitlab 模块构建 Go 应用程序

react-native - 在 Gitlab CI 中获取 expo 构建 url

c++ - Gitlab CI 运行程序

docker - 使用 keycloak 作为 gitlab-ci 服务

c++ - Docker容器中的FFmpeg未捕获帧

docker - Gitlab CI : docker not found

docker - 检测容器内的 docker socket 是属于运行在其中的 docker daemon 还是从容器主机注入(inject)的