多阶段 Dockerfile 中共享变量:FROM 之前的 ARG 未替换

2023-12-08

我正在编写一个多阶段 Dockerfile达尚实用程序:

ARG DARSHAN_VER=3.1.6

FROM fedora:29 as build
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
COPY --from=build "/usr/local/darshan-${DARSHAN_VER}" "/usr/local/darshan-${DARSHAN_VER}"
...

我用它构建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 变量的正确方法是什么?


ARG 仅持续单个映像的构建阶段。 对于多级,只需说明以下内容即可更新 ARG:

ARG DARSHAN_VER

在您的 FROM 指令之后。

cf. https://docs.docker.com/engine/reference/builder/#arg

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}"
...

您会注意到我如何在脚本顶部声明初始值,并将其拉入每个图像。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多阶段 Dockerfile 中共享变量:FROM 之前的 ARG 未替换 的相关文章

随机推荐