Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多级Dockerfile中的Share变量:未替换之前的ARG_Docker_Dockerfile_Docker Multi Stage Build - Fatal编程技术网

多级Dockerfile中的Share变量:未替换之前的ARG

多级Dockerfile中的Share变量:未替换之前的ARG,docker,dockerfile,docker-multi-stage-build,Docker,Dockerfile,Docker Multi Stage Build,我正在为以下内容编写多阶段Dockerfile: 我用docker build-t darshan util:3.6.1构建它。得到的错误是: Step 5/10 : RUN curl -O "ftp://ftp.mcs.anl.gov/pub/darshan/releases/darshan-${DARSHAN_VER}.tar.gz" && tar ... ---> Running in 9943cce1669c % Total % Receive

我正在为以下内容编写多阶段Dockerfile:

我用docker build-t darshan util:3.6.1构建它。得到的错误是:

Step 5/10 : RUN curl -O "ftp://ftp.mcs.anl.gov/pub/darshan/releases/darshan-${DARSHAN_VER}.tar.gz"     && tar ...

 ---> Running in 9943cce1669c
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
...
curl: (78) RETR response: 550
The command '/bin/sh -c curl -O "ftp://ftp.mcs.anl.gov/pub/darshan/releases/darshan-${DARSHAN_VER}.tar.gz"     && tar ...' returned a non-zero code: 78
我希望在这两个阶段中重用相同的ARG,以便只定义一次默认构建变量。 如果我在两个阶段中都复制ARG,就在两个from的下方,它将正确构建


使用默认值定义“全局”多级ARG变量的正确方法是什么?

ARGs仅适用于单个映像的构建阶段。 对于多级,只需说明以下内容即可更新参数:

ARG DARSHAN_VER
按照你的指示

比照


以下是文档中的引用:

ARG指令在定义它的构建阶段结束时超出范围。要在多个阶段中使用arg,每个阶段必须包含arg指令

在FROM之前声明的ARG在生成阶段之外,因此不能在FROM之后的任何指令中使用。要使用在第一个FROM之前声明的ARG的默认值,请使用在生成阶段中没有值的ARG指令


如果第一阶段只是下载并解压文件,为什么它需要所有这些开发工具?另外,你能从名称中删除该版本吗?这样后续步骤就不需要知道它了?@jornsharpe在解开归档文件后,有一个configure+make+make安装,但我避免报告它,以使示例最小化。太好了!我没有注意到在定义ARG指令的构建阶段结束时,
段超出了范围。要在多个阶段中使用arg,每个阶段都必须包含arg指令。
即使我读了两遍该文档,也确实存在带有默认值的“全局”多阶段arg变量(即使在您回答时),请参见,例如:嗨,Axel,谢谢您通知我,您是对的。我删除了我原来的介绍句,说这是不可能的,只留下了我的答案中对文档的引用,作为对其他人的指导。我实际上想说的是,全局变量的作用域不会自动被各个阶段的局部作用域共享,但说它不可能是错误的/误导的。
ARG DARSHAN_VER
ARG DARSHAN_VER=3.1.6

FROM fedora:29 as build
ARG DARSHAN_VER
RUN dnf install -y \
        gcc \
        make \
        bzip2 bzip2-devel zlib zlib-devel
RUN curl -O "ftp://ftp.mcs.anl.gov/pub/darshan/releases/darshan-${DARSHAN_VER}.tar.gz" \
    && tar ...


FROM fedora:29
ARG DARSHAN_VER
COPY --from=build "/usr/local/darshan-${DARSHAN_VER}" "/usr/local/darshan-${DARSHAN_VER}"
...