自定义 Gitlab 运行程序失败 - 无法连接到 Docker 守护进程

问题描述 投票:0回答:2

这些是我设置自定义 Gitlab 运行程序所遵循的步骤:

  1. 按照此处的说明安装 Gitlab 运行程序:https://docs.gitlab.com/runner/install/linux-repository.html

  2. 使用

    docker
    执行者和
    docker:19
    图像

    注册跑步者
  3. gitlab-ci.yml
    如下:

image: docker:19.03.1

services:
  - name: docker:19.03.1-dind
    alias: docker

stages:
- build

build:
  stage: build
  variables:
    IMAGE_TAG: repo.azurecr.io/some-repo
    DOCKER_HOST: tcp://172.17.0.1:2375
    DOCKER_TLS_CERTDIR: ''
  script:
    - docker login someacr.azurecr.io -u "$SERVICE_PRINCIPAL_USER" -p "$SERVICE_PRINCIPAL_PASSWORD"
    - if [[ "$CI_COMMIT_REF_NAME" == "develop" ]]; then docker build -t $IMAGE_TAG .; fi
  1. 运行管道会抛出此错误:
Login succeeded
if [[ "$CI_COMMIT_REF_NAME" == "develop" ]]; then docker build -t $IMAGE_TAG .; fi
Cannot connect to the Docker daemon at tcp://172.17.0.1:2375. Is the docker daemon running?
Cleaning up project directory and file based variables
00:02
ERROR: Job failed: exit code 1

这是我迄今为止尝试过的:

  1. privileged: true
    /etc/gitlab-runner/config.toml
  2. dind:19
    gitlab-ci.yml
  3. 中的 docker 镜像
  4. volumes = ["/var/run/docker.sock /var/run/docker.sock" "/cache"]
    中添加
    /etc/gitlab-runner/config.toml
  5. DOCKER_TLS_CERTDIR: ''
    中使用
    gitlab-ci.yml
    作为变量
  6. DOCKER_HOST
     填充 
    DOCKER_HOST: tcp://172.17.0.1:2375
  7. 变量
  8. 还有更多...

所有这些更改都会导致此处的 Gitlab Runner 故障排除中描述的两个问题之一:https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#troubleshooting

  1. docker:无法连接到位于 tcp://docker:2375 的 Docker 守护进程。 docker 守护进程是否正在运行?
  2. Docker no such host 错误。
docker gitlab gitlab-ci gitlab-ci-runner
2个回答
5
投票

您的

DOCKER_HOST
变量值不正确。

使用

DOCKER_HOST: "tcp://docker:2375"

在/etc/gitlab-runner/config.toml中添加volumes = [“/var/run/docker.sock /var/run/docker.sock”“/cache”]

我建议从此处的运行器配置中删除

/var/run/docker.sock
的卷安装。当利用
docker:dind
服务容器方法时,这不是必需的。不过,从技术上来说它不会造成问题。

特权:在 /etc/gitlab-runner/config.toml 中为 true
[...]
在 gitlab-ci.yml 中使用 DOCKER_TLS_CERTDIR: '' 作为变量

这些改变很好,保留这些改变。


0
投票

为了在 gitlab ci 中最小化 docker:dind 的问题,必须正确设置四个参数:

  • 服务应设置为“docker:20.10.16-dind”或更高版本。
  • DOCKER_TLS_CERTDIR 变量应设置为“/certs”
  • DOCKER_HOST 变量应设置为“tcp://docker:2375”
  • 并且 FF_NETWORK_PER_BUILD 应设置为 true。它允许 docker 服务和所使用的镜像之间进行通信。

部分 .gitlab-ci.yml 文件示例如下:

variables: 
  DOCKER_DIND: "docker:20.10.16-dind"                                                          
  DOCKER_TLS_CERTDIR: "/certs"
  DOCKER_HOST: "tcp://docker:2375"
  FF_NETWORK_PER_BUILD: "true"

job_name:
  image: julienlecomte/docker-make
  services:                                                                                   
    - $DOCKER_DIND                                                                            
  script:
    - /bin/true
© www.soinside.com 2019 - 2024. All rights reserved.