【问题标题】:docker pass build arg to the shell script which needs to be run during the docker buildingdocker 将 build arg 传递给需要在 docker 构建期间运行的 shell 脚本
【发布时间】:2021-07-28 15:37:56
【问题描述】:

问题是我在运行 docker build 时无法在 shell 脚本中获取 docker build arg 值。

我的 docker build 命令:

DOCKER_BUILDKIT=1 docker build --no-cache --progress=plain \
  -t test \
  --build-arg WHL_PATH=/fake/path \
  .

Dockerfile

ARG WHL_PATH

FROM python:3.8.8

COPY test.sh .

RUN ./test.sh $WHL_PATH

并且在test.sh"$1" 是空的....,如果在Dockerfile 中我输入了一些常量值,那么我将能够在$1 中看到该值,但是使用 docker build arg 或将构建 arg 设置为 ENV VAR 始终为空...

我在哪里做错了,我应该如何做到这一点?

Docker version 20.10.5, build 55c4c88

【问题讨论】:

    标签: docker


    【解决方案1】:

    构建参数是有范围的。在第一个 FROM 步骤之前,它们仅适用于 FROM 步骤以调整您使用的图像。在每个阶段中,一个 ARG 步骤适用于该阶段中的其余步骤。所以解决方法是重新排列您的步骤:

    FROM python:3.8.8
    
    COPY test.sh .
    
    ARG WHL_PATH
    
    RUN ./test.sh $WHL_PATH
    

    【讨论】:

    • 是的,你说得对,我真的应该早点来这里问...
    【解决方案2】:

    哎呀,我从来没有意识到ARG 指令的位置很重要,基本上:

    • 第一个 FROM 之前的任何 ARG 都可以在任何 FROM 行中使用

    • 构建阶段中的任何 ARG(在 FROM 之后)都可以在该构建阶段中使用

    在我将ARG WHL_PATH 移到FROM xxx 行之后,它运行良好,希望这可以节省您将来的一些时间。

    我实际上受到了这个答案的启发:https://stackoverflow.com/a/50292255/7658313

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 2019-07-16
      • 2018-08-22
      • 2019-04-09
      • 1970-01-01
      • 2016-01-13
      • 2020-11-17
      • 1970-01-01
      • 2015-02-10
      相关资源
      最近更新 更多