Многоступенчатый Dockerfile: ARG перед FROM не подставляется - PullRequest
0 голосов
/ 08 декабря 2018

Я пишу многоэтапный Dockerfile для утилит darshan :

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 со значением по умолчанию?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Как правильно определить «глобальную» многоступенчатую переменную ARG со значением по умолчанию?

эта функция не существует.

Вот цитатыиз документации:

Инструкция ARG выходит из области действия в конце этапа сборки, где она была определена.Чтобы использовать arg в несколько этапов, каждый этап должен включать инструкцию ARG.

https://docs.docker.com/engine/reference/builder/#scope

ARG, объявленный до того, как FROM находится за пределами этапа сборки,поэтому он не может быть использован ни в одной инструкции после FROM.Чтобы использовать значение по умолчанию для ARG, объявленного перед первым FROM, используйте инструкцию ARG без значения внутри этапа сборки

https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact

0 голосов
/ 08 декабря 2018

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