GitLab CI/CD Docker-In-Docker 自定义 DIND 服务失败
GitLab CI/CD Docker-In-Docker Failing with Custom DIND Service
我已经 CI/CD 在我们的私有 GitLab 实例中设置了一段时间,以构建一些包,从中创建 docker 图像,并将它们推送到我们的内部注册表。配置如下所示:
stages:
- build
services:
- docker:18.09.4-dind
image: localregistry/utilities/tools:1.0.5
build:
stage: build
script:
- mvn install
- docker build -t localregistry/proj/image:$VERSION .
- docker push localregistry/proj/image:$VERSION
tags:
- docker
直到今天,当我们开始遇到来自 Docker 的速率限制错误时,它一直运行良好。我们有一家大公司,所以这并不完全出乎意料,但它促使我考虑在本地缓存一些我们经常使用的 docker 图像。作为快速测试,我将 docker:18.09.4-dind
图像提取、重新标记并推送到我们的本地注册表,并将 CI/CD 配置中的行更改为:
services:
- localregistry/utilities/docker:18.09.4-dind
令我惊讶的是,当 运行 CI/CD 工作时,虽然图像似乎启动正常,但我开始遇到 docker 问题:
$ docker build -t localregistry/proj/image:$VERSION .
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
接下来的一个小时左右的时间用于检查运行器和在那里执行的各种 docker 环境,试图找出与简单地重新标记 DIND 图像有什么区别,但无法弄清楚什么都出来了;可以发现的唯一区别是在使用 docker:18.09.4-dind
时在环境中设置了 DOCKER_HOST=tcp://docker:2375
,但在使用 localregistry/utilities/docker:18.09.4-dind
时没有设置 - 尽管明确设置它没有帮助,触发此消息:
error during connect: Get http://docker:2375/v1.39/containers/json?all=1: dial tcp: lookup docker on 151.124.118.131:53: no such host
在那段时间里,速率限制被解除,我可以切换回正常标记的版本,但我看不出本地标记版本不起作用的原因;关于这是为什么的任何想法?
我想您的整个问题都可以通过使用 alias
作为新的 docker dind 图像来解决。只需将 services
部分替换为以下内容:
services:
- name: localregistry/utilities/docker:18.09.4-dind
alias: docker
这会导致您的 docker 守护进程 (dind) 服务可以在名称 docker
下访问,这是 docker 守护进程的默认主机名。
有关详细信息,另请参阅 extended docker configuration options in GitLab CI。
我已经 CI/CD 在我们的私有 GitLab 实例中设置了一段时间,以构建一些包,从中创建 docker 图像,并将它们推送到我们的内部注册表。配置如下所示:
stages:
- build
services:
- docker:18.09.4-dind
image: localregistry/utilities/tools:1.0.5
build:
stage: build
script:
- mvn install
- docker build -t localregistry/proj/image:$VERSION .
- docker push localregistry/proj/image:$VERSION
tags:
- docker
直到今天,当我们开始遇到来自 Docker 的速率限制错误时,它一直运行良好。我们有一家大公司,所以这并不完全出乎意料,但它促使我考虑在本地缓存一些我们经常使用的 docker 图像。作为快速测试,我将 docker:18.09.4-dind
图像提取、重新标记并推送到我们的本地注册表,并将 CI/CD 配置中的行更改为:
services:
- localregistry/utilities/docker:18.09.4-dind
令我惊讶的是,当 运行 CI/CD 工作时,虽然图像似乎启动正常,但我开始遇到 docker 问题:
$ docker build -t localregistry/proj/image:$VERSION .
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
接下来的一个小时左右的时间用于检查运行器和在那里执行的各种 docker 环境,试图找出与简单地重新标记 DIND 图像有什么区别,但无法弄清楚什么都出来了;可以发现的唯一区别是在使用 docker:18.09.4-dind
时在环境中设置了 DOCKER_HOST=tcp://docker:2375
,但在使用 localregistry/utilities/docker:18.09.4-dind
时没有设置 - 尽管明确设置它没有帮助,触发此消息:
error during connect: Get http://docker:2375/v1.39/containers/json?all=1: dial tcp: lookup docker on 151.124.118.131:53: no such host
在那段时间里,速率限制被解除,我可以切换回正常标记的版本,但我看不出本地标记版本不起作用的原因;关于这是为什么的任何想法?
我想您的整个问题都可以通过使用 alias
作为新的 docker dind 图像来解决。只需将 services
部分替换为以下内容:
services:
- name: localregistry/utilities/docker:18.09.4-dind
alias: docker
这会导致您的 docker 守护进程 (dind) 服务可以在名称 docker
下访问,这是 docker 守护进程的默认主机名。
有关详细信息,另请参阅 extended docker configuration options in GitLab CI。