极狐GitLab 解决 docker connection refused 的问题

云原生时代,使用 CI/CD 来构建容器镜像并且推送到容器镜像仓库是非常常见的事情。在极狐GitLab 中,使用下面的几行代码就能完成这个工作:

build:
  image: docker:latest
  stage: build
  services:
    - docker:20.10.7-dind
  script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:1.0.0 .
    - docker push $CI_REGISTRY_IMAGE:1.0.0

注意到,上面使用了 docker:20.10.7-dind这个镜像,也就是我们常说的 dind(docker in docker),也就是要在 docker 中执行 docker 命令来打包镜像。

如果不做任何额外处理,使用极狐GitLab Runner 运行上面的 CI/CD,就会遇到下面的问题:

极狐GitLab 解决 docker connection refused 的问题_第1张图片
也就是会提示无法连接道 docker daemon。

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://119.45.155.237:5005/v2/": dial tcp 119.45.155.237:5005: connect: connection refused
ERROR: Job failed: exit code 1

众所周知,docker 命令的执行,需要和主进程 daemon 来通信。

那如何解决这个问题呢?

方法就是将宿主机的 docker.sock 文件挂载到 Runner 中。这就需要在 Runner 的配置文件 config.toml 中写入如下内容:

[[runners]]
  name = "jh-gitlab"
  xxxxxxxx
  [runners.docker]
    xxxxxx
    volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock"]
    xxxx

将宿主机的 /var/run/docker.sock 文件挂在到 Runner 中,然后重启一下 Runner。接着重新执行 CI/CD 流水线就可以了。

极狐GitLab 解决 docker connection refused 的问题_第2张图片

更多关于极狐GitLab 的干货解读,可搜索关注公众号【极狐GitLab】,或者直接上极狐GitLab 官网 https://gitlab.cn 查看。

你可能感兴趣的:(gitlab,docker,ci/cd)