在使用build-arg标志进行Docker构建时,值未正确传递

3
我正在使用以下命令在shell脚本中传递Docker参数:
docker build -t "${IMAGE_INPUT}-temp" --build-arg BASE_IMAGE=$IMAGE_INPUT --build-arg TEMP_DIR=$TEMP -f $DOCKER_FILE .

我的Docker文件具有以下内容

ARG BASE_IMAGE
ARG TEMP_DIR
FROM $BASE_IMAGE

RUN echo $TEMP_DIR && \
    echo $BASE_IMAGE

在这里,尽管在docker构建命令中传递了值,但两个变量都打印为null。分配默认值后,它可以正常工作,但是如果没有默认值,则变量值将为空。

请问有人能帮忙解决如何传递多个参数并在我的dockerfile中使用这些参数的问题吗?

1个回答

6
每个 Dockerfile 中的 FROM 指令都会告诉 docker 开始一个新的阶段,而默认情况下没有从一个阶段传播到另一个阶段的上下文。您可以将每个阶段视为独立的镜像构建。有关多阶段 Docker 镜像构建以及它们为什么被引入的更多信息可以在此处找到
在您的情况下,这意味着您在 Docker 构建的第一个阶段(即第 0 阶段)中声明了 build arg BASE_IMAGE 和 TEMP_DIR。然而,您的 echo 命令在 Docker 构建的第二个阶段中,并且对这些 build arg 一无所知(它们的作用域限定在第 0 阶段)。
要解决此问题,您可以在需要它们的每个阶段中声明您的 build arg。这样应该能够正常工作:
# start of stage 0
ARG BASE_IMAGE

FROM $BASE_IMAGE

# start of stage 1
ARG BASE_IMAGE
ARG TEMP_DIR

RUN echo $TEMP_DIR && \
    echo $BASE_IMAGE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接