Docker构建参数未生效:RUN命令中无法插值构建参数求助
解决Docker多阶段构建中RUN命令无法插值构建参数的问题
问题核心在于Docker多阶段构建的ARG作用域限制:
- 你在第一个
FROM之前定义的ARG FOO=latest,仅对第一个构建阶段(bar阶段)生效。 - 进入第二个
FROM python:3.9-slim-bullseye阶段后,之前声明的ARG参数会被重置,因此RUN mkdir "$FOO"里的$FOO是空值,导致mkdir命令报错。
修正方法:在第二个构建阶段重新声明ARG(可保留默认值),让该阶段的命令能访问到这个参数。
修正后的Dockerfile:
ARG FOO=latest FROM python:${FOO} as bar FROM python:3.9-slim-bullseye # 重新声明ARG,使第二个阶段可访问该参数 ARG FOO=latest COPY --from=bar /bin/sh /whatever RUN mkdir "$FOO"
如果构建时需要覆盖默认值,依然可以使用docker build --build-arg FOO=3.10 .这类命令,重新声明的ARG会自动继承外部传入的参数值。
内容的提问来源于stack exchange,提问作者freebie
相关产品推荐
相关产品推荐

