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

Jenkins流水线执行Docker命令提示‘Docker not found’问题求助

问题解决建议

一、解决流水线中Docker命令未找到的问题

你使用的node:lts-buster-slim镜像默认未预装Docker客户端,因此无法直接执行docker命令,以下是三种可行解决方案:

方案1:自定义预装Docker客户端的Node镜像

构建包含Docker客户端的自定义Node镜像,避免流水线重复安装:

  1. 创建Dockerfile:
FROM node:lts-buster-slim

# 安装Docker客户端
RUN apt-get update && \
    apt-get install -y --no-install-recommends docker.io && \
    rm -rf /var/lib/apt/lists/*
  1. 构建并推送镜像到你的镜像仓库:
docker build -t node-with-docker:lts-buster-slim .
docker push node-with-docker:lts-buster-slim
  1. 修改Jenkinsfile中的代理镜像为自定义镜像:
pipeline {
    agent {
        docker { image 'node-with-docker:lts-buster-slim' }
    }
    stages {
        stage('Check Docker') {
            steps {
                sh 'docker version'
            }
        }
    }
}

方案2:流水线临时安装Docker客户端

若不想自定义镜像,可在流水线中临时安装(缺点是每次运行都会重复安装,耗时较长):

pipeline {
    agent {
        docker { image 'node:lts-buster-slim' }
    }
    stages {
        stage('Install Docker') {
            steps {
                sh 'apt-get update && apt-get install -y --no-install-recommends docker.io'
            }
        }
        stage('Check Docker') {
            steps {
                sh 'docker version'
            }
        }
    }
}

方案3:挂载宿主机Docker客户端与Socket

如果Jenkins本身运行在Docker容器中,可直接挂载宿主机的Docker资源到代理容器(需保证宿主机Docker客户端与服务端版本兼容):
修改Jenkinsfile添加挂载配置:

pipeline {
    agent {
        docker { 
            image 'node:lts-buster-slim'
            args '-v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock'
        }
    }
    stages {
        stage('Check Docker') {
            steps {
                sh 'docker version'
            }
        }
    }
}

注意:此方案需要Jenkins代理容器有足够权限访问宿主机Docker Socket,存在一定安全风险,需根据实际场景评估。

二、解决jenkins-data卷挂载不完整的问题

你的docker-compose.yml应该是仅挂载了jenkins-data卷到Jenkins容器的workspace目录,正确配置需将整个jenkins-data卷挂载到Jenkins根目录/var/jenkins_home,这样jobs、plugins、workspace等所有Jenkins数据都会存储到该卷中。

修改后的docker-compose.yml示例:

version: '3'
services:
  jenkins:
    image: jenkins/jenkins:lts-jdk11
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins-data:/var/jenkins_home  # 挂载整个Jenkins根目录到卷
    user: root  # 可选,避免权限问题
volumes:
  jenkins-data:
    external: false  # 使用内部创建的卷,若已存在外部卷可改为true

若之前已创建jenkins-data卷,无需删除,修改挂载配置后重启Jenkins容器即可,原有数据会保留。

内容的提问来源于stack exchange,提问作者Hoàng Minh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:03:10