Jenkins中使用docker-maven-plugin执行Maven集成测试遇DOCKER_HOST缺失问题
解决Jenkins上docker-maven-plugin缺失DOCKER_HOST的问题
这个问题我之前帮团队排查过类似情况,核心原因是:本地环境(比如用Docker Desktop)会自动帮你配置DOCKER_HOST环境变量,或者插件能自动探测到Docker守护进程的地址,但Jenkins服务器通常不会默认配置这个变量,导致插件找不到Docker服务。
下面是几种实用的解决办法:
1. 在Jenkins全局配置中添加环境变量
- 进入Jenkins的「Manage Jenkins」→「Configure System」页面
- 找到「Global properties」板块,勾选「Environment variables」
- 添加新变量:
- 名称:
DOCKER_HOST - 值:根据Jenkins服务器的Docker部署情况填写——Linux环境一般是
unix:///var/run/docker.sock;Windows环境如果是本地Docker daemon,可填tcp://localhost:2375(注意:裸奔式的2375端口不建议用于生产,建议搭配TLS配置)
- 名称:
- 保存配置后重新触发构建,插件就能自动读取到这个环境变量了
2. 在pom.xml中直接指定dockerHost参数
如果不想改动Jenkins全局配置,可以直接在插件配置里明确指定(建议结合Maven Profile区分不同环境):
<plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.20.1</version> <configuration> <!-- 手动指定Docker守护进程地址 --> <dockerHost>unix:///var/run/docker.sock</dockerHost> <!-- 其他插件配置... --> </configuration> <executions> <execution> <id>prepare-itdatabase</id> <phase>pre-integration-test</phase> <goals> <goal>start</goal> </goals> </execution> </executions> </plugin>
3. 用Jenkins Pipeline脚本设置环境变量(如果使用Pipeline)
如果你的Jenkins用的是Pipeline构建,可以在脚本里直接注入环境变量:
pipeline { agent any environment { DOCKER_HOST = 'unix:///var/run/docker.sock' } stages { stage('执行集成测试') { steps { sh 'mvn clean verify' } } } }
额外注意事项
- 确保Jenkins运行用户(比如
jenkins用户)有权限访问/var/run/docker.sock,可以执行命令sudo usermod -aG docker jenkins将用户加入docker组,之后重启Jenkins服务 - 如果使用Docker-in-Docker(DinD)的Jenkins Agent,
DOCKER_HOST需要设置为tcp://localhost:2376(带TLS)或tcp://localhost:2375(仅测试环境使用)
内容的提问来源于stack exchange,提问作者AlexanderNajafi
相关产品推荐
相关产品推荐

