Как определить переменную в Dockerfile?
в своем Dockerfile, Я хочу определить переменные что я могу использовать позже в Dockerfile.
Я в курсе ENV
инструкция, но я не хочу, чтобы эти переменные переменные среды.
есть ли способ объявить переменные в области Dockerfile?
4 ответа:
можно использовать
ARG
- см https://docs.docker.com/engine/reference/builder/#argThe
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.