GitLab-CI:无法链接到未运行的容器

问题描述 投票:0回答:4

我尝试让我的设置与 gitlab-ci 一起工作。我有一个简单的 gitlab-ci.yml 文件

build_ubuntu:
  image: ubuntu:14.04
  services:
    - rikorose/gcc-cmake:gcc-5
  stage: build
  script:
    - apt-get update
    - apt-get install -y python3 build-essential curl
    - cmake --version
  tags:
    - linux

我想要安装一个带有 gcc 和 cmake(apt-get 版本太旧)的 ubuntu 14.04 LTS。如果我在本地使用它(通过 docker --link 命令)一切正常,但是当 gitlab-ci-runner 处理它时,我会收到以下警告(在我的情况下这是一个错误)

Running with gitlab-ci-multi-runner 9.2.0 (adfc387)
on xubuntuci1 (19c6d3ce)
Using Docker executor with image ubuntu:14.04 ...
Starting service rikorose/gcc-cmake:gcc-5 ...
Pulling docker image rikorose/gcc-cmake:gcc-5 ...
Using docker image rikorose/gcc-cmake:gcc-5 
ID=sha256:ef2ac00b36e638897a2046c954e89ea953cfd5c257bf60103e32880e88299608 
for rikorose/gcc-cmake service...
Waiting for services to be up and running...

*** WARNING: Service runner-19c6d3ce-project-54-concurrent-0-rikorose__gcc-
cmake probably didn't start properly.

Error response from daemon: Cannot link to a non running container: /runner-
19c6d3ce-project-54-concurrent-0-rikorose__gcc-cmake AS /runner-19c6d3ce-
project-54-concurrent-0-rikorose__gcc-cmake-wait-for-service/runner-
19c6d3ce-project-54-concurrent-0-rikorose__gcc-cmake

有人知道我该如何解决这个问题吗?

提前致谢 零陵香豆

gitlab gitlab-ci gitlab-ci-runner
4个回答
26
投票

您必须使用

启动 gitlab-runner 容器
--privileged true

但这还不够。注册后由 gitlab 启动的任何运行器容器也需要获得特权。所以你需要安装gitlab-runner

docker exec -it runner /bin/bash
nano /etc/gitlab-runner/config.toml

并将特权标志从 false 更改为 true:

privileged = true

这样问题就解决了!

注意:您还可以将 config.toml 作为卷安装在容器上,然后您无需登录容器即可将特权更改为 true,因为您可以在运行容器之前对其进行预配置。


1
投票

就我而言,我必须添加

variables:
  DOCKER_TLS_CERTDIR: ""

1
投票

虽然我的 CI 配置不同并且用途不同,但我遇到了类似的问题,基本上导致了相同的错误消息,涉及尝试链接某些未运行的容器。

相关跑步者已经工作

privileged
多年。然而,特定项目的
.gitlab-ci.yml
文件中使用的服务相当过时。它包括这个定义:

  services:
    - docker:18.09-dind

主机上的 Docker 已经是 v23.x,因此更改该定义相应地为我修复了它:

  services:
    - docker:23-dind

0
投票

在我的云 VM GitLab 运行器上自托管的情况下,此问题是由于在此配置中指定

wait_for_services_timeout = -1
导致的

[[runners]]
  [runners.docker]
    tls_verify = false
    privileged = false
    wait_for_services_timeout = -1
© www.soinside.com 2019 - 2024. All rights reserved.