У меня проблема с заказом нескольких 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
Любой совет?
Это не так. Несколько директив 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
Позвольте мне знать, если это помогает.
Пожалуйста! Не могли бы вы принять ответ, если он был полезен.
Большое спасибо. Это очень помогло. Мне просто нужно было добавить g++ вместо gcc. Спасибо еще раз.