【发布时间】:2018-01-01 03:15:08
【问题描述】:
我有一个我想要的 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)
【问题讨论】:
-
你能在这两个例子中都这样做吗?而不是
docker version,这样做echo $DOCKER_HOST -
感谢@Robert - 答案已更新。看起来
$DOCKER_HOST未在 Ubuntu 映像中设置。tcp://docker:2375是一个足够恒定的值,我应该将变量导出到我的 Dockerfile 中,还是有更好的/编程方式来确定它? -
我已将建议作为答案发布。请告诉我它是否有效。
-
我认为这将是一个固定值,所以硬编码没有问题。也不算丑。
-
谢谢@Robert - 但看起来这绝对是诀窍。我仍在整理并仔细检查,但会通知您。
标签: docker gitlab gitlab-ci docker-in-docker