Возможно ли передать значение из ARG?

ARG NG_VERSION

FROM nginx:$NG_VERSION
ENV NG_VERSION=$NG_VERSION

Понимаю, что в данном примере это невозможно, хотелось бы узнать, есть ли другие способы?


Ответы (1 шт):

Автор решения: Oleg Dmitrochenko

Вы правы, при сборке переданные аргументы очищаются при использовании FROM, если они были объявлены до FROM.

Первый способ

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

ARG NG_VERSION
# ARG NG_VERSION=defaultValue

FROM nginx:$NG_VERSION

# Redefine the argument to use after FROM instruction
ARG NG_VERSION 

ENV NG_VERSION=$NG_VERSION

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

Второй способ

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

https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file

export HTTP_PROXY=http://10.20.30.2:1234
docker build -t my_image --build-arg HTTP_PROXY .

docker run --env HTTP_PROXY=http://10.20.30.2:1234 my_image

Дело в том, что вы можете использовать любую переменную окружения для уже готового образа, в отличие аргумента, который работает только во время сборки.

→ Ссылка