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

使用Jenkins Kubernetes插件执行docker build时Docker守护进程连接失败

Jenkins Kubernetes Agent Docker连接问题排查与解决

问题描述

执行docker build时出现错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

已尝试挂载/var/run/docker.sock、设置runAsUser: root以root权限运行,但问题仍未解决。对应的Jenkins as Code Pod模板配置如下:

Jenkins:config:
    chart: jenkins
    namespace: default
    repo: https://charts.jenkins.io
    values:
      agent:
        enabled: true
        podTemplates:
          jenkins-slave-pod: |
            - name: jenkins-xxx-pod
              label: ecs-slave
              serviceAccount: jenkins-xxx-prod
              containers:
                - name: main
                  image: '805xxxx.dkr.ecr.us-west-2.amazonaws.com/slave:ecs-xxxx-node_master-3'
                  command: "sleep"
                  args: "30d"
                  privileged: true
                  runAsUser: root
              volumes:
                - hostPathVolume:
                    hostPath: "/var/run/docker.sock"
                    mountPath: "/var/run/docker.sock"

排查与解决步骤

  • 检查宿主机Docker daemon状态
    登录Agent Pod所在的Kubernetes节点,执行systemctl status docker确认Docker服务是否正常运行。若服务未启动,执行systemctl start docker并设置开机自启systemctl enable docker。

  • 验证docker.sock权限映射
    进入运行中的Agent Pod,执行ls -l /var/run/docker.sock查看文件权限。宿主机的docker.sock通常属于docker用户组(GID一般为999),即使Pod以root运行,容器内若无对应GID的用户组也无法访问。解决方式:

    1. 在容器内添加GID为999的用户组:groupadd -g 999 docker
    2. 将root用户加入该组:usermod -aG docker root
      可将这两步加入镜像构建脚本,或在Pod启动命令中执行。
  • 确认hostPath挂载的正确性
    检查Kubernetes节点上/var/run/docker.sock是否存在、路径是否正确。部分环境中Docker daemon可能使用不同的socket路径(如/run/docker.sock),可在节点上执行docker info | grep "Docker Root Dir"或查看Docker配置文件确认socket路径。

  • 检查SELinux限制(若节点启用SELinux)
    若节点开启SELinux,可能阻止容器访问宿主机的docker.sock。临时关闭SELinux测试:setenforce 0,若问题解决,需添加SELinux规则允许容器访问该socket,或在Pod的securityContext中设置seLinuxOptions: { type: "spc_t" }(根据实际环境调整)。

  • 完善Agent容器的securityContext配置
    确保容器级权限配置完整,避免Pod级设置覆盖。可在容器配置中添加:

    containers:
      - name: main
        # ... 其他原有配置
        securityContext:
          privileged: true
          runAsUser: 0
          allowPrivilegeEscalation: true
    
  • 确认镜像包含兼容的Docker客户端
    检查Agent镜像是否已安装Docker客户端,且版本与宿主机Docker daemon兼容。进入Pod执行docker version,若命令不存在,需在镜像中安装对应版本的Docker客户端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:47:48