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