EKS部署的Jenkins构建Docker镜像报错docker:not found如何解决
报错原因
你遇到的docker: not found报错由两个核心因素导致:
- 运行Pipeline任务的Jenkins Agent(EKS集群中启动的Pod)使用的基础镜像未预装Docker客户端
- 新版EKS集群默认使用containerd作为容器运行时,工作节点本身没有Docker守护进程,就算安装了Docker客户端也无法直接执行构建、推送操作
解决方案
方案1:Docker客户端+挂载宿主机套接字(仅测试环境可用)
如果你的EKS工作节点仍保留了Docker运行时,可以直接修改Jenkinsfile,指定带Docker客户端的Agent镜像,同时挂载节点的Docker套接字:
pipeline { agent { kubernetes { image 'docker:latest' volumeMounts { mountPath '/var/run/docker.sock' volumeName 'docker-sock' } volumes { hostPathVolume { hostPath '/var/run/docker.sock' volumeName 'docker-sock' } } } } stages { // 保留原有构建、测试、部署阶段的代码即可 } }
该方案权限开放度高,存在容器逃逸风险,仅适合测试验证使用。
方案2:Kaniko构建镜像(生产环境推荐)
Kaniko无需依赖Docker守护进程,完全在用户空间完成镜像构建和推送,是K8s环境的首选方案,操作如下:
- 为Jenkins服务账户绑定可推送ECR镜像的IAM权限
- 修改Jenkinsfile使用Kaniko作为构建Agent:
pipeline { agent any stages { stage("build and push"){ agent { kubernetes { image 'gcr.io/kaniko-project/executor:v1.23.0-debug' serviceAccount 'jenkins-ecr-sa' // 替换为你绑定了ECR权限的服务账户名 } } steps { sh ''' /kaniko/executor \ --context `pwd` \ --dockerfile `pwd`/Dockerfile \ --destination dkr.ecr.eu-north-1.amazonaws.com/test:latest ''' } } stage('test'){ steps { echo('testing app') } } stage('deploy'){ steps { echo('deploying app') } } } }
自定义Agent镜像安装Docker方法
如果确实需要在Jenkins Agent中使用Docker命令,可以自行构建包含Docker客户端的自定义Agent镜像,参考Dockerfile如下:
# 替换为你实际使用的Jenkins Agent基础镜像 FROM jenkins/inbound-agent:latest USER root RUN apt-get update && apt-get install -y ca-certificates curl gnupg lsb-release && \ curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \ apt-get update && apt-get install -y docker-ce-cli USER jenkins
构建完成后将镜像推送到私有镜像仓库,在Pipeline中指定该镜像作为Agent即可使用Docker命令。
内容的提问来源于stack exchange,提问作者Gurkmeja101
相关产品推荐
相关产品推荐

