向docker-compose传递Makefile变量时出现未知短标志错误求助
问题:Makefile传递IMAGE标签到docker-compose时出现"unknown shorthand flag: 'e'"错误
我用Makefile帮团队快速搭建环境,写脚本把IMAGE标签传给docker-compose命令时,一直报“unknown shorthand flag: 'e' in -e”错误,找不到原因。
原Makefile代码:
.PHONY: all ARCH = $(shell uname -m) start: if [ "$(ARCH)" = "x86_64" ]; then \ IMAGE_ARCH="amd64"; \ elif [ "$(ARCH)" = "aarch64" ]; then \ IMAGE_ARCH="arm64"; \ else \ echo "Unknown architecture: $(ARCH)"; \ fi docker-compose up -d -e IMAGE=$IMAGE_ARCH
报错信息:
unknown shorthand flag: 'e' in -e
错误原因
docker-compose up命令根本没有-e参数,你把docker run的用法套到docker-compose上了——-e是docker run用来设置容器环境变量的,和docker-compose up不兼容。
另外你的Makefile还有两个隐性问题:
- 两行shell命令是分开执行的,第一行设置的
IMAGE_ARCH变量到第二行就失效了,因为它们不在同一个shell进程里 - Makefile里的
$会被解析成Make变量,要传递给shell得写成$$,不然$IMAGE_ARCH会被Make当成空变量处理
修正后的Makefile
.PHONY: all start ARCH = $(shell uname -m) start: @if [ "$(ARCH)" = "x86_64" ]; then \ IMAGE_ARCH="amd64"; \ elif [ "$(ARCH)" = "aarch64" ]; then \ IMAGE_ARCH="arm64"; \ else \ echo "Unknown architecture: $(ARCH)"; \ exit 1; \ fi; \ IMAGE=$$IMAGE_ARCH docker-compose up -d
关键修改说明
- 把所有shell命令用
\连起来,放到同一个进程里执行,确保IMAGE_ARCH变量能传递到docker-compose命令中 - 用
IMAGE=$$IMAGE_ARCH在docker-compose命令前直接设置环境变量,这是给docker-compose传递环境变量的正确方式(docker-compose会自动读取当前shell的环境变量) - 新增
exit 1,遇到未知架构时直接终止脚本,避免无效执行后续命令 - 加
@隐藏if命令本身的输出,让控制台输出更简洁(可选操作)
内容的提问来源于stack exchange,提问作者BigJobbies
相关产品推荐
相关产品推荐

