как заказать несколько ОТ? - PullRequest
0 голосов
/ 09 апреля 2019

У меня проблема с заказом нескольких FROM в Dockerfile. Я хотел бы использовать обе утилиты bash, например bc в сценариях оболочки и g ++.

Первая попытка:

FROM gcc:7.4

FROM alpine:3.9
RUN apk add --no-cache bash gawk sed grep bc coreutils

RUN g++ ...

дает

---> Running in ...
/bin/sh: g++: not found

Вторая попытка:

FROM alpine:3.9
RUN apk add --no-cache bash gawk sed grep bc coreutils

FROM gcc:7.4

RUN g++ ...

теперь дает

/test/test.sh: line 3: bc: command not found

Любой совет?

1 Ответ

3 голосов
/ 09 апреля 2019

Это не так, как это работает.Несколько FROM директив позволяют вам создавать многоступенчатые Dockerfile.Все этапы изолированы и выполняются последовательно.Можно получить доступ к файлам из одного этапа в другом, но для этого файлы должны быть скопированы в соответствующий этап, но я не буду описывать это здесь.

В вашем случаеоднако вам не нужно использовать многоступенчатую сборку, просто установите gcc как пакет, аналогичный другим пакетам:

FROM alpine:3.9
RUN apk add --no-cache bash gawk sed grep bc coreutils g++

RUN g++ ...

Вы также можете создать виртуальный пакет, чтобы удалить все пакеты сборки, когда выс этим покончено.Приведенный ниже пример удаляет gcc после его использования:

FROM alpine:3.9
RUN apk add --no-cache bash gawk sed grep bc coreutils \
    && apk add --no-cache --virtual build-dependencies g++ \
    && g++ ... \
    && apk del build-dependencies

Дайте мне знать, если это поможет.

...