4

我正在尝试使用 Docker 执行程序和 docker-in-docker 方法设置我的 GitLab CI/CD,但遇到以下问题:

在我的 .gitlab-ci.yml 中,我试图与 GitLab 的项目集成 docker 注册表建立连接:

before_script:
   - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY

但是,管道退出并出现以下错误:

Error response from daemon: Get https://my.gitlab.server:1234/v2/: x509: certificate signed by unknown authority

我能够登录到注册表并从运行 gitlab-runner 的机器上推/拉而没有问题,所以我知道证书问题不在主机上。此外,我尝试从 docker:latest 创建自定义 Docker 映像构建,它将我的证书复制到构建容器中——我尝试将它放在 /etc/ssl/certs 和 /etc/docker/certs.d/my.gitlab .server:1234 - 没有任何成功。

关于我需要将证书放在哪里或如何解决这个问题的任何想法?

4

2 回答 2

3

当有人遇到这个问题时,我解决了这个问题,将“insecure-registry”参数添加到 docker dind 服务。但这只是一种解决方法,而不是修复方法。

.gitlab-ci.yml

image: docker

services:
  - name: docker:dind
    command: ["--insecure-registry=gitlab.MYDOMAIN:PORT"]

before_script:
  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

stages:
  - build

build:
  stage: build
  script:
    - docker build .......
于 2018-05-24T17:29:47.543 回答
0

我找到了另一种(hacky)方法将 --insecure-registry 参数传递给 dockerd,它不涉及自定义 gitlab-ci.yml 配置文件。

mkdir -p /etc/gitlab-runner/dindhack
cat << EOF > /etc/gitlab-runner/dindhack/dockerd-entrypoint.sh 
#!/bin/sh
/usr/local/bin/dockerd-entrypoint.sh --insecure-registry=gitlab.MYDOMAIN:PORT $@
EOF

然后您需要在运行器 config.toml 中添加以下挂载点/etc/gitlab-runner/dindhack:/usr/local/sbin

[[runners]]
  name = "###########"
  url = "###########"
  token = "###########"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/etc/gitlab-runner/dindhack:/usr/local/sbin"]
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
于 2019-07-08T08:31:56.353 回答