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

Jenkins Agent容器执行Docker命令遇权限拒绝问题求助

解决Jenkins Agent容器执行Docker命令权限拒绝问题

问题背景

两台主机分别部署Docker容器化的Jenkins主节点和Agent节点,主从连接正常,但Agent执行docker volume create等Docker命令时,持续出现权限拒绝错误。

环境配置

主节点Docker Compose文件

version: '3.7'
services:
  jenkins:
    image: jenkins/jenkins:lts
    restart: unless-stopped
    privileged: true
    user: root
    ports:
      - 8081:8080
      - 50000:50000
    container_name: jenkins-master
    volumes:
      - data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
    deploy:
      resources:
          limits:
            memory: 2G
          reservations:
            memory: 256M
volumes:
  data:

Agent节点Docker Compose文件

version: '3.7'
services:
  jenkins:
    image: jenkins/ssh-agent:alpine
    restart: unless-stopped
    ports:
      - 23:22
    container_name: jenkins-agent2
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
    environment:
      JENKINS_AGENT_SSH_PUBKEY: MYKEY
    deploy:
      resources:
          limits:
            memory: 2G
          reservations:
            memory: 256M

错误信息

执行的Shell命令:

echo $USER
docker volume create testvol

报错内容:

[create docker volumes] $ /bin/sh -xe /tmp/jenkins10140641630471278856.sh
+ echo jenkins
jenkins
+ docker volume create testvol
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/volumes/create": dial unix /var/run/docker.sock: connect: permission denied
Build step 'Execute shell' marked build as failure

问题分析

容器内默认以jenkins用户运行,尽管该用户UID/GID与主机拥有Docker权限的Local_Admin用户一致,但主机的/var/run/docker.sock归docker用户组所有,容器内的jenkins用户未加入对应组,因此无法访问socket文件导致权限拒绝。

解决方案

方案1:将容器内jenkins用户加入主机docker组(推荐生产环境)

  1. 在Agent主机上查询docker组的GID:
    getent group docker | cut -d: -f3
    
    得到结果(比如1001)后,修改Agent的Docker Compose文件,添加user和group_add配置:
    version: '3.7'
    services:
      jenkins:
        image: jenkins/ssh-agent:alpine
        restart: unless-stopped
        ports:
          - 23:22
        container_name: jenkins-agent2
        user: jenkins
        group_add:
          - 1001  # 替换为你主机docker组的实际GID
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - /usr/bin/docker:/usr/bin/docker
        environment:
          JENKINS_AGENT_SSH_PUBKEY: MYKEY
        deploy:
          resources:
              limits:
                memory: 2G
              reservations:
                memory: 256M
    
  2. 重启Agent容器:
    docker-compose down && docker-compose up -d
    

方案2:临时放宽docker.sock权限(仅测试用,不推荐生产)

在Agent主机上执行以下命令,让所有用户都能访问docker.sock:

sudo chmod 666 /var/run/docker.sock

此方法简单但存在安全风险,仅适合临时测试场景。

方案3:以root用户运行Agent容器

修改Agent的Docker Compose文件,添加user: root配置,让容器以root用户运行:

version: '3.7'
services:
  jenkins:
    image: jenkins/ssh-agent:alpine
    restart: unless-stopped
    ports:
      - 23:22
    container_name: jenkins-agent2
    user: root  # 切换为root用户运行
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
    environment:
      JENKINS_AGENT_SSH_PUBKEY: MYKEY
    deploy:
      resources:
          limits:
            memory: 2G
          reservations:
            memory: 256M

重启容器后,Agent内以root身份执行Docker命令即可避免权限问题,但需注意root用户带来的安全隐患。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:27:51