GitLab CI运行程序无法连接到Kubernetes中的tcp:// localhost:2375

时间:2019-03-08 14:41:37

标签: docker kubernetes gitlab

我按照此文档在GKE上安装了Gitlab: https://docs.gitlab.com/ee/install/kubernetes/gitlab_chart.html

我的安装参数是:

helm upgrade --install gitlab gitlab/gitlab \
  --timeout 600 \
  --set global.hosts.domain=***** \
  --set global.hosts.externalIP=***** \
  --set certmanager-issuer.email=***** \
  --set gitlab.migrations.image.repository=registry.gitlab.com/gitlab-org/build/cng/gitlab-rails-ce \
  --set gitlab.sidekiq.image.repository=registry.gitlab.com/gitlab-org/build/cng/gitlab-sidekiq-ce \
  --set gitlab.unicorn.image.repository=registry.gitlab.com/gitlab-org/build/cng/gitlab-unicorn-ce \
  --set gitlab.unicorn.workhorse.image=registry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-ce \
  --set gitlab.task-runner.image.repository=registry.gitlab.com/gitlab-org/build/cng/gitlab-task-runner-ce \
  --set gitlab.gitlab-runner.runners.privileged=true \
  --set gitlab.gitlab-runner.runners.cache_dir="cache"

然后我创建了.gitlab-ci.yaml:

image: docker:latest

services:
  - docker:dind

variables:
  DOCKER_HOST: tcp://localhost:2375

stages:
  - package

package:
  stage: package
  before_script:
    - echo "${GKE_JSON_AUTH}" > gke-project-auth.json || exit 1
    - cat gke-project-auth.json | docker login -u _json_key --password-stdin https://eu.gcr.io || exit 1
  script:
    - docker info

我已经阅读了很多线程,都在DOCKER_HOSTprivileged参数中获得了解决方案,但是我总是遇到这个错误:

  

无法通过tcp:// localhost:2375连接到Docker守护程序。是个   docker守护进程正在运行?

我还试图放入一个values.yaml文件:

runners:
  privileged: true

并执行以下命令:

helm upgrade --reuse-values gitlab gitlab/gitlab -f values.yaml

但未成功...

有什么主意吗?谢谢!

4 个答案:

答案 0 :(得分:8)

显然,根据this,此问题与Docker更新其映像docker:dind有关,后者使用了最新版本的Docker服务器,该版本不再在2375处监听,在2376

因此,我按照该条目的建议更新了.gitlab-ci.yml,它对我有用:

image: docker:stable

services:
  - docker:18.09-dind

...

[更新]

这是一个临时解决方法。 docker:stabledocker:stable-dind图像现已修复。

答案 1 :(得分:1)

我发现了我的错误。我们可以在这里看到“安装命令行选项”: https://gitlab.com/charts/gitlab/blob/master/doc/installation/command-line-options.mdprivileged参数是gitlab-runner.runners.privileged而不是gitlab.gitlab-runner.runners.privileged(并且cache_dir不存在)。 因此,现在可以:

--set gitlab-runner.runners.privileged=true

答案 2 :(得分:0)

这种使用docker:18.09docker:18.09-dind图像的解决方案有效。

.gitlab-ci.yml

build_image:
  stage: build
  image: docker:18.09
  variables:
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_DRIVER: overlay2
  services:
    - docker:18.09-dind

有关此问题的更多讨论:https://gitlab.com/gitlab-org/gitlab-runner/issues/4501

答案 3 :(得分:-1)

Docker-in-Docker服务将以其映像名称docker命名。您应该将DOCKER_HOST设置为tcp://docker:2375