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

Docker部署的Jenkins运行Docker流水线提示docker命令不存在

Docker部署的Jenkins运行容器化流水线提示docker: not found(退出码127)

环境与配置

在Docker容器内部署Jenkins实例,对接独立的Docker-in-Docker服务作为流水线构建的容器运行时,参照官方指引完成配置如下:

Dockerfile配置

FROM jenkins/jenkins:lts-jdk11

USER root

RUN apt-get update \
    && apt-get install -y \
        docker 

USER jenkins
RUN jenkins-plugin-cli --plugins docker-workflow:1.28

docker-compose编排配置

version: "3.3" 

services:
  docker:
    image: docker:dind
    restart: on-failure
    privileged: true
    volumes:
      - ${JENKINS_HOME}:/var/jenkins_home
      - ${JENKINS_CERTS}:/certs/client
    ports:
      - "2376:2376"
    environment:
      DOCKER_TLS_CERTDIR: /certs
  jenkins:
    build: services/jenkins 
    restart: on-failure
    depends_on:
      - "docker"
    volumes:
      - ${JENKINS_HOME}:/var/jenkins_home
      - ${JENKINS_CERTS}:/certs/client:ro
    ports:
      - "8080:8080"
      - "50000:50000"
    environment:
      DOCKER_HOST: tcp://docker:2376
      DOCKER_CERT_PATH: /certs/client
      DOCKER_TLS_VERIFY: 1

流水线Jenkinsfile配置

pipeline {
    agent { 
        docker { image 'gcc:12.1.0' } 
    }
    stages {
        stage('build') {
            steps {
                sh 'cmake -S . -B _output'
                sh 'cmake --build _output'
            }
        }
   }
}

故障现象

运行上述流水线时直接失败,核心报错日志如下:

[Pipeline] sh
+ docker inspect -f . gcc:12.1.0
/var/jenkins_home/workspace/my-pipeline@tmp/durable-231ff8ae/script.sh: 1: docker: not found
[Pipeline] sh
+ docker pull gcc:12.1.0
/var/jenkins_home/workspace/my-pipeline@tmp/durable-b0322a5b/script.sh: 1: docker: not found
[Pipeline] End of Pipeline
ERROR: script returned exit code 127
Finished: FAILURE

报错核心为执行docker inspect、docker pull命令时提示找不到docker命令,脚本退出码127,流水线终止。

根因分析

  • Dockerfile中apt-get install -y docker装错了包:Debian/Ubuntu官方apt源里名为docker的包是X11窗口系统的系统托盘兼容工具,和容器工具Docker没有任何关系,所以Jenkins容器里根本没有可用的docker命令行,执行docker相关操作时自然报找不到命令。
  • 现有配置中已经正确部署了dind服务、配置了TLS证书和DOCKER_HOST环境变量,仅缺少正确安装的Docker客户端即可打通调用链路。

修复方案

  1. 替换原有Jenkins镜像的Dockerfile,安装官方Docker CE客户端,修正后的Dockerfile内容如下:
FROM jenkins/jenkins:lts-jdk11

USER root

# 安装依赖并添加Docker官方源
RUN apt-get update \
    && apt-get install -y ca-certificates curl gnupg lsb-release \
    && mkdir -p /etc/apt/keyrings \
    && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
    && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list \
    && apt-get update \
    # 仅安装Docker CLI客户端,不需要部署完整Docker引擎
    && apt-get install -y docker-ce-cli \
    && rm -rf /var/lib/apt/lists/*

USER jenkins
RUN jenkins-plugin-cli --plugins docker-workflow:1.28
  1. 重新构建Jenkins镜像,跳过缓存确保新配置生效:
docker-compose build --no-cache jenkins
  1. 重启整个服务栈:
docker-compose up -d

验证方法

  • 启动完成后执行docker-compose exec jenkins docker version,如果返回结果中同时包含Client版本信息和对应dind服务的Server版本信息,说明客户端安装、服务连通均正常。
  • 重新触发流水线任务,即可正常拉取gcc:12.1.0镜像,在容器内执行cmake构建步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:01:03