【问题标题】:In a Docker Build with the build-arg flag,values are not getting passed correctly在带有 build-arg 标志的 Docker 构建中,未正确传递值
【发布时间】:2020-11-17 01:54:25
【问题描述】:

我在 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 build 命令中传递了值,但两个变量在此处都打印为 null。分配默认值后,它可以工作,但没有默认值,变量值将变为 null。

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

【问题讨论】:

    标签: docker docker-compose dockerfile docker-build


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 2018-02-03
      • 2021-07-28
      • 2020-11-14
      • 2017-07-06
      • 2018-06-27
      • 2020-09-26
      • 2021-03-06
      • 2019-01-08
      相关资源
      最近更新 更多