自定义Gitlab Runner失败-无法连接到Docker守护进程

q5iwbnjs  于 2023-11-17  发布在  Docker
关注(0)|答案(2)|浏览(98)

以下是我设置自定义Gitlab runner的步骤:
1.按照以下说明安装Gitlab runner:https://docs.gitlab.com/runner/install/linux-repository.html
1.使用docker exectuor和docker:19 image注册跑步者
1.将gitlab-ci.yml写为:

image: docker:19.03.1

services:
  - name: docker:19.03.1-dind
    alias: docker

stages:
- build

build:
  stage: build
  variables:
    IMAGE_TAG: repo.azurecr.io/some-repo
    DOCKER_HOST: tcp://172.17.0.1:2375
    DOCKER_TLS_CERTDIR: ''
  script:
    - docker login someacr.azurecr.io -u "$SERVICE_PRINCIPAL_USER" -p "$SERVICE_PRINCIPAL_PASSWORD"
    - if [[ "$CI_COMMIT_REF_NAME" == "develop" ]]; then docker build -t $IMAGE_TAG .; fi

字符串
1.运行管道会抛出此错误:

Login succeeded
if [[ "$CI_COMMIT_REF_NAME" == "develop" ]]; then docker build -t $IMAGE_TAG .; fi
Cannot connect to the Docker daemon at tcp://172.17.0.1:2375. Is the docker daemon running?
Cleaning up project directory and file based variables
00:02
ERROR: Job failed: exit code 1


这就是我到目前为止所尝试的:

  1. /etc/gitlab-runner/config.toml中的privileged: true
  2. gitlab-ci.yml中的dind:19 Docker镜像
    1.在/etc/gitlab-runner/config.toml中添加volumes = ["/var/run/docker.sock /var/run/docker.sock" "/cache"]
    1.在gitlab-ci.yml中使用DOCKER_TLS_CERTDIR: ''作为变量
    1.使用DOCKER_HOST: tcp://172.17.0.1:2375填充DOCKER_HOST变量
    1.更多...
    所有这些更改都会导致Gitlab Runner故障排除中描述的两个问题之一:https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#troubleshooting
  3. docker:无法在tcp://docker:2375连接到Docker守护进程。docker守护进程正在运行吗?
  4. Docker no such host error.
eimct9ow

eimct9ow1#

DOCKER_HOST变量值不正确。
使用DOCKER_HOST: "tcp://docker:2375"
在/etc/gitlab-runner/config.toml中添加卷= ["/var/run/docker.sock /var/run/docker.sock”“/cache”]
我建议在这里从runner配置中删除/var/run/docker.sock的卷挂载。在利用docker:dind服务容器方法时,这不是必需的。尽管如此,从技术上讲,它不会引起问题。
在/etc/gitlab-runner/config.toml中为true
[...]
在gitlab-ci.yml中使用了DOCKER_TLS_CERTBlock:''作为变量
这些变化是好的,保持这些变化。

nwlls2ji

nwlls2ji2#

为了在gitlab ci中使用docker:dind的问题最少,必须正确设置四个参数:

  • 服务应该设置为'docker:20.10.16-dind'或更高版本。
  • DOCKER_TLS_CERTBlock变量应设置为“”,否则它似乎试图使用TLS。
  • DOCKER_HOST变量应该设置为“tcp://docker:2375”
  • FF_NETWORK_PER_BUILD应该设置为true。它允许Docker服务和所使用的镜像之间的通信。

示例部分.gitlab-ci.yml文件如下:

variables: 
  DOCKER_DIND: "docker:20.10.16-dind"                                                          
  DOCKER_TLS_CERTDIR: ""
  DOCKER_HOST: "tcp://docker:2375"
  FF_NETWORK_PER_BUILD: "true"

job_name:
  image: julienlecomte/docker-make
  services:                                                                                   
    - $DOCKER_DIND                                                                            
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

字符串

相关问题