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
相关产品推荐
相关产品推荐

