【问题标题】:Gitlab-CI DinD will not startGitlab-CI DinD 不会启动
【发布时间】:2019-01-28 04:20:29
【问题描述】:

我正在尝试将 DinD(Docker 中的 Docker)与我的 Gitlab-CI 构建脚本一起使用,但无论我进行什么更改,我都会不断收到相同的错误。我做错了什么?

错误

Service container logs: 
2018-08-21T22:54:00.129660274Z mount: permission denied (are you root?)
2018-08-21T22:54:00.129701426Z Could not mount /sys/kernel/security.
2018-08-21T22:54:00.129706380Z AppArmor detection and --privileged mode might break.
2018-08-21T22:54:00.130334774Z mount: permission denied (are you root?)
...
$ docker info
error during connect: Get http://docker:2375/v1.38/info: dial tcp: lookup docker on 8.8.8.8:53: no such host

gitlab-ci.yml

django_build:
  stage: build
  variables:
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_DRIVER: overlay2
  image: docker:stable
  services:
    - docker:dind
  before_script:
    - docker info
  script:
    - echo "Building something." 

gitlab-runner config.toml

concurrent = 1 
check_interval = 0 

[[runners]]
  name = "###"
  url = "###"
  token = "###"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:3.4"
    privileged = true
    disable_cache = false
    volumes = ["/cache"]
  [runners.cache]
    Insecure = false

/etc/docker/daemon.json

{
    "storage-driver": "overlay2"
}

---编辑---

对于任何回来看这个的人来说,这就是我如何让它工作的。在提交到 repo 之前,我在本地机器上运行 gitlab-runner 来测试东西。

运行命令时:

gitlab-runner exec docker django_build

无论出于何种原因,它都没有使用我的配置文件。我找到了这个链接:https://gitlab.com/gitlab-org/gitlab-runner/issues/1791 声明你必须在命令中退出 --docker-privileged

运行后:

gitlab-runner exec docker --docker-privileged django_build

一切正常。

【问题讨论】:

  • 设置 privileged=true 后是否重启了 gitlab-runner?
  • @Rickkwa 是的。 systemctl restart gitlab-runner.service
  • docker 主机使用host 变量在config.toml 中设置

标签: docker docker-compose gitlab gitlab-ci gitlab-ci-runner


【解决方案1】:

仔细检查GitLab runner parameters when running docker

特别是,请确保将 gitlab-runner 用户添加到 docker 组:

sudo usermod -aG docker gitlab-runner

从那里,sudo -u gitlab-runner -H docker info 应该可以工作。

如果不是,请检查/etc/hosts is mounted as a volume, as in this bug


官方gitlab-runner documentation 表示,对于 DiD 执行器,要创建一个 config.toml

[[runners]]
  url = "https://gitlab.com/"
  token = TOKEN
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true

但是 OP 发现 privileged = true 没有被使用。
除非 config.tml 是由 sudo gitlab-runner register -n... --docker-privileged 命令创建的。

如果没有,则需要gitlab-runner exec docker --docker-privileged

【讨论】:

  • gitlab-runner 在 docker 组中。您提到的 docker info 命令在主机上工作,但 docker info 仍然在容器内给我一个错误。
  • 'sudo usermod -aG docker gitlab-runner' 为我工作,谢谢!
猜你喜欢
  • 2020-08-13
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2018-07-01
  • 2016-08-08
  • 2023-01-03
  • 1970-01-01
  • 2019-04-12
相关资源
最近更新 更多