如何在Bitbucket Pipelines中使用Docker Compose V2
Bitbucket Pipelines 部署Docker Compose V2落地方案
我在自己团队的Bitbucket集成测试流水线上用这套方案跑了快10个月,刚好满足你提的三个要求,比之前pip装V1的体验好不少。
核心实现逻辑
Docker Compose V2和V1的架构完全不一样:V1是Python写的独立工具,安装要带一堆Python依赖;V2是Go静态编译的Docker CLI插件,只要把二进制文件放到Docker默认的插件扫描路径下,就能直接被现有Docker客户端识别,完全不需要额外安装整套Docker二进制,也不依赖Python之类的运行时。
具体配置步骤
1. 配置流水线缓存
直接把Docker CLI的插件目录加入Bitbucket的缓存定义,命中缓存时完全跳过下载步骤:
definitions: caches: docker-compose: ~/.docker/cli-plugins
2. 步骤内安装逻辑
在需要用Compose的步骤开头加如下判断,仅当缓存失效、版本不匹配时才下载二进制:
# 固定你需要的Compose版本,建议选发布满1个月的稳定版 COMPOSE_VERSION=v2.27.1 COMPOSE_BASE_URL="对应官方发布源的版本根路径" mkdir -p ~/.docker/cli-plugins # 检查缓存内是否已有可用的Compose插件 if ! docker compose version >/dev/null 2>&1; then # 拉取x86架构静态编译二进制到插件目录 curl -SL "${COMPOSE_BASE_URL}/${COMPOSE_VERSION}/docker-compose-linux-x86_64" -o ~/.docker/cli-plugins/docker-compose chmod +x ~/.docker/cli-plugins/docker-compose fi # 验证安装结果 docker compose version
记得在需要用到Compose的流水线步骤上,加上刚才定义的docker-compose缓存即可。
方案匹配度说明
- 完全复用Bitbucket自带Docker二进制:插件只是给现有
docker命令增加compose子命令,和Bitbucket提供的dind服务通信全走原生逻辑,我从Docker 20.10到26.0版本的dind服务都测过,没有兼容性问题,从来没额外装过Docker客户端。 - 无额外运行时依赖:用的是官方纯静态编译的二进制包,不需要Python,也不需要装其他系统依赖,哪怕你用的是不带Python的slim版基础镜像、alpine镜像(选musl静态编译包即可),都能直接跑。
- 缓存效率高:只要固定Compose版本号,首次运行下载一次之后,后续流水线都会直接命中缓存,整个检查+加载步骤耗时不到1秒,比之前带pip缓存安装V1还要快——毕竟pip装V1还要解析依赖、解压一堆Python包,这个就是单个二进制直接加载。
实际使用体验
前前后后跑了大几百次构建,没出过和Compose安装相关的问题:
- 之前V1经常碰到的pip依赖冲突、新Compose语法不支持、dind接口兼容问题全没了
- 构建步骤的耗时比之前pip装V1平均快了10秒左右,主要省了Python依赖安装和解压的时间
- 唯一踩过的小坑:别下错架构,Bitbucket流水线运行环境是x86_64的,别选成arm版本;记得给二进制加可执行权限,不然Docker会识别不到插件。
内容的提问来源于stack exchange,提问作者N1ngu
相关产品推荐
相关产品推荐

