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

Jenkins节点Docker权限拒绝问题求助:临时修复后反复失效

解决Jenkins从节点Docker权限持续失效问题

根本原因

  • Docker守护进程重启(比如系统更新、服务重启)会重置/var/run/docker.sock的权限,默认只有root和docker组用户可访问,临时改777权限会被覆盖
  • 直接将jenkins加入sudoers并非持久化的权限管理方式,且存在安全风险,若sudoers配置不彻底(如未设置免密)也会引发问题

持久化解决方案

1. 将jenkins用户加入docker用户组(官方推荐)

这是Docker官方认可的权限管理方式,无需每次sudo,且权限可持久化:

  • 执行命令创建docker组(若不存在):
    sudo groupadd docker
    
  • 将jenkins用户加入docker组:
    sudo usermod -aG docker jenkins
    
  • 重新加载用户组设置(无需重启系统,让jenkins立即生效组权限):
    newgrp docker
    
  • 重启Jenkins服务,确保进程使用新的组权限:
    sudo systemctl restart jenkins
    

2. 确保Docker守护进程的socket权限默认归属docker组

修改Docker daemon配置,保证重启后socket权限自动正确设置:

  • 编辑Docker daemon配置文件:
    sudo nano /etc/docker/daemon.json
    
  • 添加或修改以下内容(文件为空则直接写入):
    {
      "group": "docker"
    }
    
  • 重启Docker服务:
    sudo systemctl restart docker
    

此后Docker重启时,/var/run/docker.sock权限会自动设为root:docker,jenkins作为组成员可正常访问。

3. 安全化sudo执行Docker的方案(特殊场景备用)

若因需求必须保留sudo执行Docker,需确保jenkins用户免密执行相关命令:

  • 编辑sudoers文件:
    sudo visudo
    
  • 在文件末尾添加以下内容(最小化权限,仅允许jenkins免密执行Docker命令):
    jenkins ALL=(ALL) NOPASSWD: /usr/bin/docker
    
  • 保存退出后验证:
    sudo -u jenkins docker ps
    

验证有效性

完成配置后,可手动重启Docker服务,检查socket权限:

ls -l /var/run/docker.sock

输出应显示类似:srw-rw---- 1 root docker 0 ... /var/run/docker.sock,此时jenkins无需sudo即可正常执行Docker命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:27:18