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

K8s部署Gitlab Runner连接Docker主机失败问题求助

解决Kubernetes中Gitlab Runner连接Docker daemon失败的问题

错误原因分析

你遇到的Connection refused错误,核心原因是Docker daemon的访问地址配置错误,同时Runner配置与CI流水线配置存在冲突:

  • 在.gitlab-ci.yml中启用了docker:dind服务,但将DOCKER_HOST指向localhost:2375——dind服务作为独立容器运行在同一Pod内,主容器需通过服务名而非localhost访问它。
  • Runner的values.yaml中同时挂载了主机的docker.sock,这会与dind服务的Docker daemon产生冲突。

解决方案(推荐使用docker:dind服务)

1. 修正.gitlab-ci.yml中的Docker主机地址

将maven-build-image-prod任务里的DOCKER_HOST变量修改为dind服务的容器名(默认是服务name字段值docker),同时添加Docker客户端安装步骤(amazoncorretto:17默认不含Docker客户端):

maven-build-image-prod:
  only:
    - main
    - Dev
  stage: build
  variables:
    DOCKER_HOST: 'tcp://docker:2375'  # 从localhost改为docker
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""  
  services:
  - name: docker:19.03-dind
    entrypoint: ["dockerd-entrypoint.sh", "--tls=false"]
  script:
    - apt-get update && apt-get install -y docker.io
    - echo "Building image to container registry..."
    - ./mvnw spring-boot:build-image 
  tags:
    - development-test

2. 清理Runner配置中的冲突挂载

编辑Gitlab Runner的values.yaml,移除挂载主机docker.sock和docker-config的hostPath卷(使用dind服务无需直接访问主机Docker资源):

# 保留其他配置,删除以下两段
# [[runners.kubernetes.volumes.host_path]]
#   name = "docker-socket"
#   path = "/var/run/docker.sock"
#   mount_path = "/var/run/docker.sock"
#   read_only = false
# [[runners.kubernetes.volumes.host_path]]
#   name = "docker-config"
#   path = "/path/to/your/docker/config"
#   mount_path = "/etc/docker"
#   read_only = true

3. 重新部署Gitlab Runner

执行Helm升级命令应用配置更改:

helm upgrade gitlab-runner gitlab/gitlab-runner -n gitlab-runner -f values.yaml

备选方案(直接使用主机Docker daemon,不推荐)

若坚持使用主机的Docker daemon,需做以下调整:

  1. 删除.gitlab-ci.yml中的docker:dind服务及相关变量:
maven-build-image-prod:
  only:
    - main
    - Dev
  stage: build
  variables:
    DOCKER_DRIVER: overlay
    GIT_STRATEGY: clone
  script:
    - echo "Building image to container registry..."
    - ./mvnw spring-boot:build-image 
  tags:
    - development-test
  1. 确保主机/var/run/docker.sock权限正确,Runner的Pod服务账号拥有足够权限访问主机资源。
  2. 在Runner所在节点执行docker ps,验证主机Docker daemon是否正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:18:57