如何让Makefile优先用docker-compose,不存在则用docker compose实现可移植?
实现兼容两种Docker Compose命令的Makefile
当然可行,你可以通过在Makefile中定义动态变量来实现这个逻辑:优先使用docker-compose,如果系统中没有该命令,自动切换为docker compose。
具体写法如下:
# 检查系统中是否存在docker-compose,不存在则使用docker compose DOCKER_COMPOSE := $(shell command -v docker-compose 2>/dev/null || echo "docker compose") run: $(DOCKER_COMPOSE) up --build
逻辑说明
command -v docker-compose 2>/dev/null:这条命令会查找系统中是否存在docker-compose可执行文件,存在则返回其路径,不存在则返回空,同时将错误输出重定向到/dev/null避免冗余信息。|| echo "docker compose":如果前面的命令返回空(即未找到docker-compose),则输出docker compose作为备选命令。- 将上述结果赋值给
DOCKER_COMPOSE变量,后续在run目标中直接调用该变量即可。
这样你的Makefile就能在不同环境下自动适配两种命令格式,保证可移植性。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

