You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向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还有两个隐性问题:

  1. 两行shell命令是分开执行的,第一行设置的IMAGE_ARCH变量到第二行就失效了,因为它们不在同一个shell进程里
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:07