Возможно ли передать значение из ARG?
ARG NG_VERSION
FROM nginx:$NG_VERSION
ENV NG_VERSION=$NG_VERSION
Понимаю, что в данном примере это невозможно, хотелось бы узнать, есть ли другие способы?
Ответы (1 шт):
Вы правы, при сборке переданные аргументы очищаются при использовании 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
Дело в том, что вы можете использовать любую переменную окружения для уже готового образа, в отличие аргумента, который работает только во время сборки.