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

如何为Jenkins代理镜像配置Docker访问权限?

Jenkins SSH代理容器挂载Docker Socket权限拒绝问题解决

问题根源

你遇到的权限拒绝,核心原因是容器内jenkins用户所属的docker组GID,和主机上docker socket所属的docker组GID不匹配。Docker socket的访问权限由主机的docker组控制,容器内就算创建了docker组、把jenkins加进去,只要GID和主机的不一致,就拿不到权限。之前在容器内或主机上操作用户组的方法没用,就是因为没解决GID匹配的问题。

解决步骤

  1. 查询主机docker组的GID
    在主机终端执行命令:

    getent group docker | cut -d: -f3
    

    输出的数字就是主机docker组的GID(常见值如998、1001)。

  2. 扩展Jenkins SSH代理镜像同步GID
    编写自定义Dockerfile,在安装git的同时,创建与主机docker组同GID的组,并将jenkins用户加入该组:

    FROM jenkins/ssh-agent:latest
    USER root
    # 安装git并清理缓存
    RUN apt-get update && apt-get install -y git --no-install-recommends && rm -rf /var/lib/apt/lists/*
    # 接收主机docker组GID参数,创建对应组并添加jenkins用户
    ARG DOCKER_GID=998
    RUN groupadd -g ${DOCKER_GID} docker && usermod -aG docker jenkins
    USER jenkins
    
  3. 在docker-compose中传递GID参数
    修改docker-compose.yml,构建镜像时传入你查到的主机docker组GID,同时挂载socket和docker二进制:

    version: '3'
    services:
      jenkins-agent:
        build:
          context: ./agent # 指向存放Dockerfile的目录
          args:
            DOCKER_GID: 1001 # 替换为第一步查到的GID
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - /usr/bin/docker:/usr/bin/docker
        environment:
          - JENKINS_AGENT_SSH_PUBKEY=你的Jenkins控制器公钥内容
    

额外注意点

  • 挂载/usr/bin/docker时,要确保主机Docker版本和容器内依赖库兼容。如果出现docker: error while loading shared libraries类报错,建议去掉该挂载,改用容器内安装对应版本的Docker CLI,或者使用与主机Docker版本匹配的基础镜像。
  • 若不想构建自定义镜像,也可在启动容器时通过--group-add参数直接添加主机docker组的GID,但这种方式需每次启动指定,不如构建镜像持久化方便:
    docker run -d --group-add 1001 -v /var/run/docker.sock:/var/run/docker.sock jenkins/ssh-agent:latest
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:50:25