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

运行Jenkinsfile时出现docker.sock权限被拒绝报错如何解决

问题根本原因

报错是因为Jenkins运行用户无权限访问宿主机的Docker套接字文件/var/run/docker.sock,你尝试的sudo方案失败是因为Jenkins运行用户没有配置sudo免密权限,没有宿主机操作权限的前提下可以通过以下几种修改Jenkinsfile的方式解决:


方案1:容器启动时追加Docker组GID(推荐,无安全风险)

  1. 先临时添加一个阶段获取宿主机Docker组的GID,运行一次拿到结果后可以删除该阶段:
stage('查询Docker组GID') {
    sh 'getent group docker | cut -d: -f3'
}
  1. 假设拿到的GID为999,修改docker.inside的启动参数,追加--group-add 999即可:
node {
    docker.withRegistry("https://001.dkr.ecr.eu-west-1.amazonaws.com/my-tooling") {
        docker.image('my-tooling:deploy-agent_0.0.3')
                .inside("-v /var/lib/jenkins/.ivy2:/home/jenkins/.ivy2 --group-add 999", {
                    // 原有业务逻辑
                })
    }
}

原理是将宿主机Docker组的ID直接加入容器运行用户的附属组,容器内用户即可获得docker.sock的访问权限,不需要修改任何宿主机配置。


方案2:使用root用户启动容器(最简单)

如果安全规则允许容器内使用root用户运行,直接在启动参数中添加-u root即可:

docker.image('my-tooling:deploy-agent_0.0.3')
        .inside("-v /var/lib/jenkins/.ivy2:/home/jenkins/.ivy2 -u root", {
            // 原有业务逻辑
        })

方案3:自定义镜像预置权限

如果你有权限修改my-tooling:deploy-agent镜像的Dockerfile,可以提前在镜像中预置对应GID的Docker组,并将jenkins用户加入组中:

# 假设宿主机Docker组GID为999
RUN groupadd -g 999 docker && usermod -aG docker jenkins

重新构建镜像后使用新镜像运行任务即可,无需每次在Jenkinsfile中追加参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:57:03