Как определить переменную в Dockerfile?


в своем Dockerfile, Я хочу определить переменные что я могу использовать позже в Dockerfile.

Я в курсе ENV инструкция, но я не хочу, чтобы эти переменные переменные среды.

есть ли способ объявить переменные в области Dockerfile?

4 62

4 ответа:

можно использовать ARG - см https://docs.docker.com/engine/reference/builder/#arg

The ARG инструкция определяет переменную, которую пользователи могут передавать build-время для строителя с помощью docker build команда с помощью --build-arg <varname>=<value> флаг. Если пользователь указывает сборку аргумент, который не был определен в файле Dockerfile, выводит ошибка.

насколько мне известно, только ENV позволяет это, как упоминалось в " замена окружающей среды"

переменные среды (объявленные с помощью ENV оператор) также может использоваться в некоторых инструкциях в качестве переменных для интерпретации Dockerfile.

они должны быть переменными среды, чтобы быть повторно объявлены в каждом новом контейнере, созданном для каждой строки Dockerfile с помощью docker build.

другими словами, эти переменные интерпретируются не непосредственно в файле Dockerfile, а в контейнере, созданном для строки Dockerfile, поэтому используется переменная среды.


в этот день, я использую как ARG (настройки 1.10+, и docker build --build-arg var=value) и ENV.
Используя ARG только означает, что ваша переменная видна во время сборки, не во время выполнения.

мой Dockerfile обычно имеет:

ARG var
ENV var=${var}

в вашей кейс,ARG достаточно: я использую его обычно для установки переменной http_proxy, что docker build нуждается в доступе к интернету во время сборки.

если переменная повторно используется в том же RUN инструкции, можно просто установить переменную оболочки. Мне очень нравится, как они подошли к этому с официальный Ruby Dockerfile.

чтобы ответить на ваш вопрос:

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

Вы можете определить переменную с:

ARG myvalue=3

пробелы вокруг равного символа не допускаются.

и использовать его в дальнейшем с

RUN echo $myvalue > /test