MacOS下Jenkins Docker镜像构建报Docker权限拒绝,如何将jenkins用户加入Docker组
问题原因
你遇到的权限报错是因为MacOS上运行的Docker Desktop,默认仅开放docker.sock文件的访问权限给宿主机的docker用户组,你启动Jenkins容器时没有做对应的权限映射,导致容器内的jenkins用户无法访问挂载进去的docker套接字文件。
解决方案
方法一:调整启动参数(推荐,永久生效)
- 先在Mac本地终端执行命令查询docker用户组的GID:
dscl . read /Groups/docker PrimaryGroupID,记录输出的数字(默认一般为999) - 停止当前运行的Jenkins容器:
docker stop [你的Jenkins容器名称] - 重新启动Jenkins容器,新增两个核心参数:
- 挂载宿主机docker套接字到容器内:
-v /var/run/docker.sock:/var/run/docker.sock - 给容器内jenkins用户追加宿主机docker组权限:
--group-add [你刚才查询到的docker GID]
- 挂载宿主机docker套接字到容器内:
- 完整启动命令示例:
docker run -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ --group-add 999 \ --name jenkins \ jenkins/jenkins:lts
如果你用docker-compose部署Jenkins,直接在配置中新增group_add: - 999(替换为你自己的docker GID)即可。
方法二:进入容器手动配置(临时生效,容器重建后需要重新操作)
- 以root身份进入正在运行的Jenkins容器:
docker exec -u root -it [你的Jenkins容器名称] bash - 容器内创建和宿主机GID一致的docker组:
groupadd -g [你查询到的docker GID] docker - 将jenkins用户加入docker组:
usermod -aG docker jenkins - 给docker套接字文件赋权:
chmod 660 /var/run/docker.sock - 退出容器后重启Jenkins生效:
docker restart [你的Jenkins容器名称]
验证
配置完成后可以在Jenkins流水线中新增临时步骤执行docker ps,如果能正常输出进程列表没有权限报错,说明配置生效,你提供的Dockerfile和Jenkinsfile本身语法无问题,可以正常运行。
你使用的Dockerfile内容
FROM python:3.7-alpine CMD [ "python", "-c", "print('Hi there!')"]
你使用的Jenkinsfile内容
pipeline { agent any stages { stage("build") { steps { sh """ docker build -t hello_there . """ } } stage("run") { steps { sh """ docker run --rm hello_there """ } } } }
内容的提问来源于stack exchange,提问作者Johnny Bravo
相关产品推荐
相关产品推荐

