在带有Build arg标志的Docker Build中,无法正确传递值



我在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

但是,尽管在dockerbuild命令中传递了值,两个变量在这里都打印为null。在指定默认值后,它可以工作,但如果没有默认值,变量值将变为null。

有人能帮助我如何传递多个参数并在我的dockerfile 中使用这些参数吗

Dockerfile中的每个FROM指令都指示docker启动一个新阶段,默认情况下没有上下文从一个阶段传播到下一个阶段。你可以把每个阶段看作是一个独立的形象构建。关于多阶段docker镜像构建以及引入它们的原因的更多信息,可以在这里的文档中找到。

在您的情况下,这意味着您在docker构建的第一阶段(在本例中为阶段0(中声明构建参数BASE_IMAGE和TEMP_DIR。然而,echo命令处于docker构建的第二阶段,因此对这些构建参数一无所知(它们的作用域为阶段0(。

为了解决这个问题,您可以在每个需要的阶段声明构建参数。这应该很好:

# 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

最新更新