在带有 build-arg 标志的 Docker 构建中,值未正确传递
In a Docker Build with the build-arg flag,values are not getting passed correctly
我在 shell 脚本中使用以下命令来传递 docker args
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。分配默认值后它可以工作但没有默认值变量值将为空。
有人可以帮助我如何传递多个参数并在我的docker文件
中使用这些参数
Dockerfile 中的每个 FROM
指令指示 docker 开始一个新阶段,默认情况下没有上下文从一个阶段传播到下一个阶段。您可以将每个阶段视为一个独立的映像构建。有关多阶段 docker 映像构建以及引入它们的原因的更多信息,请参见文档 here.
在您的情况下,这意味着您要在 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
我在 shell 脚本中使用以下命令来传递 docker args
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。分配默认值后它可以工作但没有默认值变量值将为空。
有人可以帮助我如何传递多个参数并在我的docker文件
中使用这些参数Dockerfile 中的每个 FROM
指令指示 docker 开始一个新阶段,默认情况下没有上下文从一个阶段传播到下一个阶段。您可以将每个阶段视为一个独立的映像构建。有关多阶段 docker 映像构建以及引入它们的原因的更多信息,请参见文档 here.
在您的情况下,这意味着您要在 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