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

Jenkins容器内执行Docker命令权限不足,求解决方案

解决Jenkins容器内调用Docker权限被拒绝问题

环境信息

  • Jenkins镜像:jenkins/jenkins:2.361.1-lts-jdk11
  • 容器启动命令:
docker run -p 8080:8080 -p 50000:50000 -d  -v jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --privileged jenkins/jenkins:2.361.1-lts-jdk11

当前进展

已完成代码拉取、项目构建步骤,现需通过Jenkins构建Docker镜像并推送到Docker Hub。

相关配置文件

Jenkinsfile

pipeline{
    agent any
    tools{
        maven 'Maven-3.8.6'
    }
    stages{
    stage('checkout'){
                steps{
                    echo 'checkout the application'
                    git 'https://github.com/hvalola/demo_jenkins'
                }
            }
        stage('build'){
            steps{
                echo 'building the application'
                sh 'mvn package'
            }
        }
        stage('test'){
            steps{
                echo 'testing the application'
            }
        }
        stage('deploy'){
            steps{
                echo 'deploying the application'
            }
        }
        stage('Build docker image'){
            steps{
                script{
                    def dockerHome = tool 'demo-docker'
                    env.PATH = "${dockerHome}/bin:${env.PATH}"
                    sh 'docker build -t pubudurana/demo_jenkins .'
                }
            }
        }
    }
}

Dockerfile

FROM openjdk:11
EXPOSE 8090
ADD target/demo_jenkins.jar demo_jenkins.jar
ENTRYPOINT ["java","-jar","/devops-integration.jar"]

错误信息

docker build -t pubudurana/demo_jenkins .
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.29/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=pubudurana%2Fdemo_jenkins&target=&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied

解决方案

方法1:调整Jenkins用户权限(推荐)

Jenkins默认以jenkins用户运行,该用户无宿主机docker组权限,需将其加入对应组:

  1. 查看宿主机docker组GID:
cat /etc/group | grep docker

输出示例:docker:x:999:,其中999为GID。
2. 进入Jenkins容器:

docker exec -it <Jenkins容器ID> /bin/bash
  1. 将jenkins用户加入对应组:
usermod -aG 999 jenkins
  1. 重启Jenkins容器:
docker restart <Jenkins容器ID>

方法2:临时修改socket权限(仅测试环境)

在Jenkinsfile的docker构建步骤前临时放开socket权限:

stage('Build docker image'){
    steps{
        script{
            def dockerHome = tool 'demo-docker'
            env.PATH = "${dockerHome}/bin:${env.PATH}"
            sh 'chmod 666 /var/run/docker.sock'
            sh 'docker build -t pubudurana/demo_jenkins .'
        }
    }
}

注意:此方法会降低系统安全性,禁止生产环境使用。

方法3:使用Docker-in-Docker模式(生产环境可选)

让Jenkins容器内部运行独立Docker daemon,避免共享宿主机socket:
修改启动命令:

docker run -p 8080:8080 -p 50000:50000 -d \
  -v jenkins_home:/var/jenkins_home \
  --privileged \
  jenkins/jenkins:2.361.1-lts-jdk11 \
  /usr/local/bin/jenkins.sh --enable-future-java

随后在Jenkins中配置Docker插件指向容器内部的daemon地址即可。

额外修复:Dockerfile路径错误

你的Dockerfile中ENTRYPOINT引用的/devops-integration.jar与ADD的demo_jenkins.jar不匹配,需修正:

FROM openjdk:11
EXPOSE 8090
ADD target/demo_jenkins.jar demo_jenkins.jar
ENTRYPOINT ["java","-jar","/demo_jenkins.jar"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:25:13