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组(推荐生产环境)
- 在Agent主机上查询docker组的GID:
得到结果(比如getent group docker | cut -d: -f31001)后,修改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 - 重启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
相关产品推荐
相关产品推荐

