MacBook M1 Pro上Jenkins提示docker: command not found问题求助
解决M1 Pro上Brew安装的Jenkins找不到Docker的问题
核心原因
Brew安装的Jenkins默认以jenkins系统用户运行,该用户既没有访问Docker可执行文件的环境变量路径,也可能缺少访问Docker服务的权限;加上M1架构下Docker Desktop的路径特性,导致Jenkins无法定位到docker命令。
解决步骤
1. 确认Docker可执行文件路径
在Mac终端执行以下命令,获取Docker的安装路径:
which docker
M1 Pro上Docker Desktop的默认输出通常是/usr/local/bin/docker或/Applications/Docker.app/Contents/Resources/bin/docker。
2. 配置Jenkins的环境变量
Brew安装的Jenkins配置文件位于/usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist,编辑该文件添加Docker路径到PATH:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>homebrew.mxcl.jenkins</string> <key>ProgramArguments</key> <array> <string>/usr/libexec/java_home</string> <string>-v</string> <string>17</string> <string>--exec</string> <string>java</string> <string>-Dmail.smtp.starttls.enable=true</string> <string>-jar</string> <string>/usr/local/opt/jenkins/libexec/jenkins.war</string> <string>--httpListenAddress=127.0.0.1</string> <string>--httpPort=8080</string> </array> <!-- 新增环境变量配置 --> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Docker.app/Contents/Resources/bin</string> </dict> <key>RunAtLoad</key> <true/> </dict> </plist>
将PATH值替换为包含你之前查到的Docker路径的内容,然后重启Jenkins服务:
brew services restart jenkins
3. 确保Jenkins用户能访问Docker服务
Mac上Docker Desktop的socket默认位于用户目录下,系统用户jenkins无法直接访问。可以创建全局软链接并调整权限:
# 创建软链接到全局路径 sudo ln -s ~/Library/Containers/com.docker.docker/Data/docker.sock /var/run/docker.sock # 赋予全局可读可写权限(注意:此操作降低安全性,仅用于测试或非生产环境) sudo chmod 666 /var/run/docker.sock
4. 配置Jenkins全局工具(可选)
进入Jenkins后台 → 系统管理 → 全局工具配置,找到Docker配置项:
- 直接指定Docker的安装路径(如
/usr/local/bin/docker) - 保存配置后,Jenkins会优先使用该路径的Docker命令
5. 验证Docker可用性
修改你的Pipeline,添加测试步骤确认Docker是否可访问:
pipeline { agent any environment { DOCKERHUB_CREDENTIALS = credentials('dh_cred') } triggers { pollSCM('*/5 * * * *') // Vérifier toutes les 5 minutes } stages { stage('Test Docker'){ steps { sh 'which docker' sh 'docker --version' } } stage('Checkout'){ agent any steps{ checkout scm } } // 其他阶段保持不变... } }
运行Pipeline,查看测试阶段的输出,确认Docker命令可正常执行。
额外提示
- 确保Docker Desktop在后台正常运行,M1架构下Docker服务需要启动才能响应命令
- 若使用Docker插件的容器化代理(如
agent { docker { ... } }),需在插件配置中指定正确的Docker路径
内容的提问来源于stack exchange,提问作者sami
相关产品推荐
相关产品推荐

