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

AWS EC2 Docker部署Jenkins运行管道时sudo/docker not found报错如何解决

错误根因

  • sudo not found报错:官方jenkins/jenkins:lts镜像默认未预装sudo工具,且容器内默认运行的jenkins用户无sudo权限,执行sudo命令直接失败。
  • docker not found报错:
    1. 原有Jenkins启动命令未挂载宿主机docker客户端二进制到容器内,容器内无docker可执行文件
    2. 最后一个构建阶段设置了agent none,无可用执行环境调用docker命令
    3. 未挂载宿主机docker.sock到容器内,即使有docker命令也无法连接docker daemon

解决方案

第一步:调整Jenkins容器启动配置

先停止删除原有Jenkins容器:

docker stop jenkins-master && docker rm jenkins-master

使用新的启动命令运行容器:

sudo docker run --privileged --name jenkins-master \
-p 80:8080 -p 50000:50000 \
-v /var/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-u root \
-d jenkins/jenkins:lts

新增参数说明:

  • -v /var/run/docker.sock:/var/run/docker.sock:挂载宿主机docker daemon的通信套接字到容器内,让容器内的docker命令可以直接操作宿主机docker
  • -v /usr/bin/docker:/usr/bin/docker:挂载宿主机docker客户端二进制到容器内,无需单独在容器内安装docker,版本和宿主机保持一致
  • -u root:使用root用户运行容器内的Jenkins进程,直接规避docker.sock访问权限问题,无需额外执行权限修改命令

第二步:修正Jenkinsfile配置

移除冗余的权限修改阶段,修正阶段命名和agent配置,修改后内容如下:

pipeline {
    agent none
    stages {
        stage('Maven Build') {
            agent {
                docker {
                    image 'maven:3-alpine'
                    args '-v $HOME/.m2:/root/.m2'
                }
            }
            steps {
                sh 'mvn clean package -DskipTests'
            }
        }
        stage('Docker Image Build') {
            agent any
            steps {
                script {
                    image = docker.build("image11")
                    println "Newly generated image: " + image.id
                }
            }
        }
    }
}

修改点说明:

  • 删除了Docker Permissions阶段,使用root启动后无需再修改docker.sock权限
  • 修正了重复的stage命名,避免执行冲突
  • 最后一个构建阶段将agent none改为agent any,指定在Jenkins master节点执行,可直接调用容器内预装的docker命令

可选:非root运行方案(安全要求更高的场景)

如果不希望用root用户运行Jenkins,可按如下方式调整:

  1. 先在宿主机执行命令获取docker组的gid:getent group docker | cut -d: -f3,假设输出为999
  2. 启动命令移除-u root参数,新增--group-add 999参数(将容器内的jenkins用户加入宿主机docker组,获得docker.sock访问权限)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:18:03