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:2375DOCKER_DRIVER:overlay2DOCKER_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
相关产品推荐
相关产品推荐

