Используйте значение --build-arg в Dockerfile из параметра
В настоящее время я использую AWS ECR для размещения изображений моего проекта, и мне нужно, чтобы параметр FROM был динамическим в Dockerfile в соответствии с --build-arg, отправленным из командной строки. Пример:
$ docker build --build-args region=us-east-1 .
// Dockerfile
FROM aws.ecr.huge.url.${region}/repo:php-apache
WORKDIR /var/www
RUN echo "@@@"
${region} никогда не заменяется, и я получаю ошибку, говорящую, что изображение не существует.
Если я запускаю echo ${region}, это работает, проблема, кажется, с инструкцией FROM.
Есть ли какой-нибудь способ достичь этого?2 ответа:
Обновленный ответ:
С введением многоступенчатых сборок, docker добавил возможность предоставлять
ARG
перед строкойFROM
. Это будет выглядеть так:# default to us-east-1 ARG region=us-east-1 FROM aws.ecr.huge.url.${region}/repo:php-apache
Обратите внимание, что
ARG
's-пространство имен . Если они определены перед строкойFROM
, они доступны для строкFROM
. И внутри стадии они доступны до конца этой стадии. Если вам нужно использоватьARG
в нескольких пространствах имен, вы можете определить его несколько раз.
Оригинальный ответ от до введения многоступенчатых сборок:
Это не поддерживается, как вы нашли, и как задокументировано в ограничениях расширения переменных :
Переменные окружения поддерживаются следующим списком инструкции в файле Dockerfile:
- добавить
- копия
- ENV
- разоблачить
- метка
- пользователь
- директорию
- объем
- стопсигнал
А также:
- ONBUILD (в сочетании с одной из поддерживаемых инструкций выше)
Чтобы обойти это, я подозреваю, что вам нужно будет сначала сгенерировать Dockerfile с помощью внешнего процесса, например, с помощью команды
sed "s/__region__/$region/" <Dockerfile.in >Dockerfile
.