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客户端即可打通调用链路。
修复方案
- 替换原有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
- 重新构建Jenkins镜像,跳过缓存确保新配置生效:
docker-compose build --no-cache jenkins
- 重启整个服务栈:
docker-compose up -d
验证方法
- 启动完成后执行
docker-compose exec jenkins docker version,如果返回结果中同时包含Client版本信息和对应dind服务的Server版本信息,说明客户端安装、服务连通均正常。 - 重新触发流水线任务,即可正常拉取gcc:12.1.0镜像,在容器内执行cmake构建步骤。
内容的提问来源于stack exchange,提问作者WilliamB
相关产品推荐
相关产品推荐

