如何在本地安装的gitlab runner上以特权模式使用docker中的docker

如何在本地安装的gitlab runner上以特权模式使用docker中的docker,gitlab,gitlab-ci,gitlab-ci-runner,Gitlab,Gitlab Ci,Gitlab Ci Runner,我在一台备用计算机上安装了GitLab Runner,通过标记某些作业来运行CI作业。但是,我管道中的一些作业需要docker中的docker,我目前无法在本地gitlab runner上运行这些作业。相反,我在gitlab.com上的共享跑步者上运行它们。我已经阅读了说明如何在gitlab runner中使用docker executor的特权模式的文档: 下面是我用来在我的机器上注册gitlab runner的命令: sudo gitlab-runner register \ --no

我在一台备用计算机上安装了GitLab Runner,通过标记某些作业来运行CI作业。但是,我管道中的一些作业需要docker中的docker,我目前无法在本地gitlab runner上运行这些作业。相反,我在gitlab.com上的共享跑步者上运行它们。我已经阅读了说明如何在gitlab runner中使用docker executor的特权模式的文档:

下面是我用来在我的机器上注册gitlab runner的命令:

sudo gitlab-runner register \
  --non-interactive \
  --url "https://gitlab.com/" \
  --registration-token "$PROJECT_REGISTRATION_TOKEN" \
  --executor "docker" \
  --docker-image alpine:latest \
  --description "docker-runner" \
  --tag-list "privileged" \
  --run-untagged="true" \
  --locked="false" \
  --access-level="not_protected"
下面是由上述命令生成的
/etc/gitlab runner/config.toml

sudo cat /etc/gitlab-runner/config.toml
[sudo] password for brian: 
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "docker-runner"
  url = "https://gitlab.com/"
  token = "my-token-abcd-1234"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    pull_policy = "always"
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
以下是我尝试在特权模式下运行的作业:

Build backend:
  tags:
    - privileged
  stage: build
  image: docker:stable
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
  services:
    - docker:dind
  before_script:
    - |
      docker login \
        -u $CI_REGISTRY_USER \
        -p $CI_REGISTRY_PASSWORD \
        $CI_REGISTRY
  script:
    - |
      docker build \
        -t $CI_REGISTRY_IMAGE/backend:latest \
        -f backend/scripts/prod/Dockerfile .
    - docker push $CI_REGISTRY_IMAGE/backend:latest
  only:
    changes:
      - backend/**/*
以下是我运行此作业时看到的错误:

$ docker login \ # collapsed multi-line command
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
$ docker build \ # collapsed multi-line command
Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?
我可以看到作业正在被我的跑步者拾取,并且它正在本地机器上启动容器,但是在
docker build
命令上失败,如上所示

我发现以下gitlab问题,并尝试了一种似乎对很多人都有效的解决方案:


这里似乎列出了很多其他的解决方案,关于正确的解决方法也有很多困惑。

我在写问题的时候解决了这个问题,但我想与大家分享,以帮助更容易找到这个解决方案

上述线程()的结尾链接到一篇有用的文章:

正如文章中所描述的,禁用TLS对我很有效

保持一切与我在问题中描述的相同,添加

DOCKER_TLS_CERTDIR: ""
作业的
变量
部分允许作业无错误地继续进行