Docker中Jenkins Pipeline无法使用docker-compose的解决咨询
问题描述
我在Docker中运行Jenkins,正在学习CI/CD并编写Jenkins Pipeline。已经挂载docker.sock等卷,Docker命令可正常运行,但docker-compose(v1)和docker compose(v2)命令均无法被识别。
Jenkinsfile代码
pipeline { agent any stages { stage ("******** docker-compose ********") { steps { dir("FE"){ sh "docker-compose version" } } } } }
报错信息
docker-compose (v1) 报错
+ docker-compose version /var/jenkins_home/workspace/test_deploy_front/FE@tmp/durable-4da14a9d/script.sh: 1: docker-compose: not found
docker compose (v2) 报错
+ docker compose version docker: 'compose' is not a docker command. See 'docker --help'
已在宿主机安装docker-compose-plugin(v2)和docker-compose(v1),想解决命令无法识别的问题,同时有疑问:仅在Docker内部的Jenkins中安装docker-compose(v1)是否可行?了解Docker-in-Docker不是好方案,是不是应该认为Docker Compose不属于Docker?
解决方案
方案1:在Jenkins容器内安装Docker Compose(推荐)
通过挂载docker.sock让Jenkins调用宿主机Docker的方式,不属于Docker-in-Docker,只是共享宿主机的Docker引擎。在Jenkins容器内安装Docker Compose完全可行,步骤如下:
- 进入Jenkins容器:
docker exec -it <jenkins容器ID/名称> bash - 安装Docker Compose v1(Linux环境):
或安装v2作为Docker插件:curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-composemkdir -p ~/.docker/cli-plugins/ curl -SL https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m) -o ~/.docker/cli-plugins/docker-compose chmod +x ~/.docker/cli-plugins/docker-compose - 验证:在容器内执行
docker-compose version或docker compose version确认可用
方案2:挂载宿主机的Docker Compose到Jenkins容器
如果宿主机已安装Docker Compose,可直接将宿主机的二进制文件挂载到Jenkins容器内:
- 对于v1:找到宿主机
docker-compose路径(通常为/usr/local/bin/docker-compose),启动Jenkins容器时添加挂载参数:-v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose - 对于v2:找到宿主机Docker Compose插件路径(通常为
/usr/local/lib/docker/cli-plugins/docker-compose),挂载到Jenkins容器对应位置:
注意确保挂载后的文件拥有执行权限。-v /usr/local/lib/docker/cli-plugins/docker-compose:/usr/local/lib/docker/cli-plugins/docker-compose
疑问解答
- 在Jenkins容器内安装Docker Compose完全可行,这和Docker-in-Docker无关——你仍然通过
docker.sock调用宿主机的Docker引擎,只是在容器内多了一个操作Docker的工具。 - Docker Compose确实不属于Docker引擎核心部分:v1是独立工具,v2是Docker官方插件,所以即使Docker命令可用,也需要单独安装才能使用Compose相关命令。
内容的提问来源于stack exchange,提问作者BUZZ_PERFECT
相关产品推荐
相关产品推荐

