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

在Jenkins Docker代理中运行Docker容器遇权限问题求助

解决Jenkins中Docker-in-Docker的权限与镜像引用问题

我来帮你搞定这两个问题,先理清楚前因后果,再给你具体的解决方案:

第一个问题:docker: invalid reference format 错误

你最初用了$(which docker)在agent的args里,这个写法是shell的命令替换,但Jenkins在解析docker agent的参数时,不会执行shell解析,直接把整个字符串传给docker run,所以导致了镜像引用格式错误。你换成绝对路径/usr/bin/docker是完全正确的,这步已经解决了第一个问题。

第二个问题:Error: connect EACCES /var/run/docker.sock 权限问题

这个错误的核心是容器内运行Jenkins Agent的用户没有访问/var/run/docker.sock的权限。宿主机器上的docker.sock默认属于docker用户组(GID通常是999,但不同机器可能有差异),而容器内的Jenkins用户不在这个组里,所以被拒绝访问。

下面是几种靠谱的解决方案,按推荐程度排序:

方案1:启动容器时添加用户到宿主的docker组

这是最灵活且安全的方法:

  1. 先在你的Jenkins宿主机器上执行这个命令,获取docker组的GID:
    getent group docker | cut -d: -f3
    
    比如得到的结果是999(记下来这个数字)。
  2. 修改你的Jenkins流水线配置,在args里添加--group-add [你的GID],替换成上面得到的数字:
    pipeline {
        agent { 
            docker { 
                image 'danthedev/dtd-docker-node' 
                args '-p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker --group-add 999' 
            } 
        }
        environment { CI = 'true' }
        stages {
            stage('Build') { steps { sh 'yarn install' } }
            stage('Test') { 
                environment { NODE_ENV = 'test' } 
                steps { sh 'yarn test' } 
            }
        }
    }
    
    这样容器内的Jenkins用户就会被临时加入对应GID的组,拥有访问docker.sock的权限。

方案2:自定义镜像时预先配置权限(适合长期维护镜像)

如果你自己维护danthedev/dtd-docker-node这个镜像,可以修改Dockerfile,把Jenkins用户加入docker组:

# 假设基础镜像已经创建了jenkins用户
# 创建docker组(如果不存在),GID和宿主保持一致
RUN groupadd -g 999 docker || true
# 将jenkins用户加入docker组
RUN usermod -aG docker jenkins

注意:如果宿主的docker组GID不是999,这个方法会失效,所以方案1更通用。

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

如果只是快速测试,可以在宿主机器上执行这个命令,让所有用户都能访问docker.sock:

chmod 666 /var/run/docker.sock

但这种做法会带来安全风险,生产环境绝对不要用。

最后补充一句:你现在用的是**Docker-out-of-Docker(DooD)**模式(通过挂载宿主的docker.sock来复用宿主的Docker引擎),比真正的Docker-in-Docker(DinD)更轻量,也更适合你的测试场景,只要权限配置正确就能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:26:09