You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Helm部署在K8s的Gitlab Auto DevOps流水线无法连接Docker问题求助

问题核心原因及解决方案

1. 修正Runner执行器配置(最核心遗漏点)

你在Kubernetes集群中部署Gitlab Runner,却配置了executor = "docker",该执行器依赖Runner Pod自身可访问Docker守护进程,在K8s环境下属于适配错误,需更换为适配K8s的kubernetes执行器,对应的Helm values配置调整如下:

gitlabUrl: https://gitlab.mydomain.com
rbac:
  create: true
runnerRegistrationToken: mytoken
runners:
  privileged: true
  config: |
    [[runners]]
      executor = "kubernetes"
      environment = ["DOCKER_TLS_CERTDIR=", "DOCKER_HOST=tcp://localhost:2375", "DOCKER_DRIVER=overlay2"]
      [runners.kubernetes]
        namespace = "gitlab-runner" # 替换为你实际的Runner命名空间
        privileged = true
        tls_verify = false
        [[runners.kubernetes.volumes.empty_dir]]
          name = "docker-certs"
          mount_path = "/certs/client"
          medium = "Memory"

2. 配置CI全局变量

在Gitlab项目或所在组的设置- CI/CD - 变量中添加以下3个变量,作用于所有流水线:

  • DOCKER_HOST: tcp://docker:2375
  • DOCKER_DRIVER: overlay2
  • DOCKER_TLS_CERTDIR: 留空(值设为空字符串)

3. 统一Docker镜像与DinD服务版本

所有流水线使用的Docker镜像与DinD服务版本必须完全一致,禁止跨版本混用,示例配置如下(可替换为你需要的版本):

# 如手动扩展Auto DevOps配置需加入以下内容,官方模板默认已包含服务声明,只需保证版本匹配
image: docker:20.10.24
services:
  - name: docker:20.10.24-dind
    alias: docker

4. 排查K8s集群权限限制

确认你的集群未通过Pod安全策略(PSP)、安全上下文约束(SCC,Openshift环境)或其他准入控制器禁止特权容器运行,DinD服务必须开启特权模式才能正常启动Docker守护进程。

5. 验证配置是否生效

可提交以下测试流水线验证Docker连接是否正常:

test-dind-connection:
  stage: test
  image: docker:20.10.24
  services:
    - docker:20.10.24-dind
  script:
    - docker info
    - docker run hello-world

如果该任务运行成功,说明DinD配置正常,再重新运行Auto DevOps流水线即可。

内容的提问来源于stack exchange,提问作者locomoco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:51:00