首页 > 解决方案 > 如何设置启用 docker-dind TLS 的 Gitlab-Runner

问题描述

我一直在为我的 CI 使用一个自托管的 Gitlab-Runner,虽然我没有任何 Gitlab 的自有实例服务器,只有运行器,所以我直接使用 gitlab.com。直到最近,我一直在 Linux 机器上使用这个运行器,它运行正常。

但是,对于几个不相关的问题,我已将其移至 Windows 并开始出现错误。如果我在 Docker 而不是 Windows/Linux 中运行 Gitlab-Runner,我会遇到同样的错误。

我得到了著名的错误:

“x509:由未知机构签署的证书”

这与以下内容有关:

https://docs.gitlab.com/runner/configuration/tls-self-signed.html

https://about.gitlab.com/blog/2019/07/31/docker-in-docker-with-docker-19-dot-03/

我试图禁用 TLS(我的 .gitlab-ci.yml 中的 DOCKER_TLS_CERTDIR=""),但它不起作用,因为当我尝试使用运行 CI 时 docker build blabla。

有人有 gitlab.com 的工作示例吗?我看到的所有示例都与 Gitlab 的自实例有关,因此他们向您解释他们已经创建了证书并将其放在文件夹中等。但是,如果我使用 Gitlab.com,我该如何创建证书?如果我不是它的所有者(我在这里的知识非常少)。据我了解,创建此类证书的应该是 Gitlab-Runner,但我在任何地方都看不到它们。我尝试在 Gitlab-Runner 中添加卷(volumes = ["/certs/client", "/cache"]),然后添加 DOCKER_TLS_CERTDIR="/certs",如上面链接中所述,但它不起作用。

如果我使用共享运行器运行我的 CI,那么它可以正常工作。我的 CI 的一部分如下所示:

stages:
  - test
  - build
  - deploy

variables:
   DOCKER_TLS_CERTDIR = "blabla"
test_server:
  tags:
    - mytag
  stage: test
  image: docker/compose:1.27.4
  services:
    - docker:19.03.8-dind
  before_script:
    - echo "$CI_JOB_TOKEN" | docker login -u $CI_REGISTRY_USER --password-stdin $GITLAB_REGISTRY
  script:
    - docker build blabla

预先感谢您和问候。

标签: dockersslgitlabgitlab-ci-runnerdocker-in-docker

解决方案


推荐阅读