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

如何在Dockerfile的RUN命令中正确使用ARG变量?

问题:Dockerfile配置Python版本和requirements文件路径时出现"-r option requires 1 argument"错误

错误原因

你在FROM指令之前定义的REQUIREMENTS_FILE变量,在FROM之后的构建阶段不会自动继承。Docker中每个FROM都会开启一个新的构建阶段,阶段之间的ARG变量默认不共享,导致执行RUN python3 -m pip install -r $REQUIREMENTS_FILE时,$REQUIREMENTS_FILE为空,pip的-r选项没有获取到参数,因此报错。

另外需要注意:Docker构建时只能访问构建上下文目录(即docker build命令最后指定的路径)内的文件,如果你的requirements.txt在上级目录,必须确保它被包含在构建上下文中,否则容器内会找不到该文件。

解决方案

修正后的Dockerfile

在FROM之后重新声明REQUIREMENTS_FILE ARG,让当前构建阶段能继承全局定义的变量值:

ARG VERSION=3.9
ARG REQUIREMENTS_FILE="../requirements.txt"

FROM python:$VERSION
# 重新声明ARG,继承全局变量值
ARG REQUIREMENTS_FILE

RUN python3 -m ensurepip
# 用双引号包裹变量,避免路径含空格时出现问题
RUN python3 -m pip install -r "$REQUIREMENTS_FILE"

CMD python3 -m pip freeze

构建命令调整

如果requirements.txt位于上级目录,需要将构建上下文指定为上级目录,同时调整REQUIREMENTS_FILE的路径为相对上下文的路径:

docker build -t myimage:1.0 --build-arg VERSION=3.10 --build-arg REQUIREMENTS_FILE="requirements.txt" ..

如果要以当前目录为构建上下文,需确保requirements.txt在当前目录或子目录中,此时构建命令可以保持原格式:

docker build -t myimage:1.0 --build-arg VERSION=3.10 --build-arg REQUIREMENTS_FILE="./requirements.txt" .

验证

构建完成后运行容器,执行以下命令查看已安装的依赖,确认配置生效:

docker run --rm myimage:1.0

内容的提问来源于stack exchange,提问作者Magyar_57

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:53:20