В моем Dockerfile я хотел бы определить переменные, которые я смогу использовать позже в Dockerfile .
Я знаю о ENV
инструкции, но я не хочу, чтобы эти переменные были переменными среды.
Есть ли способ объявить переменные в области Dockerfile ?
variables
docker
dockerfile
Maxime
источник
источник
Ответы:
Вы можете использовать
ARG
- см. Https://docs.docker.com/engine/reference/builder/#argисточник
Насколько мне известно,
ENV
позволяет только это, как указано в « Замена окружающей среды »Они должны быть переменными среды, чтобы их можно было повторно объявить в каждом новом контейнере, созданном для каждой строки файла Dockerfile
docker build
.Другими словами, эти переменные интерпретируются не напрямую в Dockerfile, а в контейнере, созданном для строки Dockerfile, поэтому используется переменная окружения.
В этот день я использую и
ARG
( докер 1.10+, иdocker build --build-arg var=value
) иENV
.Использование
ARG
одного означает, что ваша переменная видна во время сборки, а не во время выполнения.Мой Dockerfile обычно имеет:
В вашем случае этого
ARG
достаточно: я обычно использую его для установки переменной http_proxy, которая нужна сборке Docker для доступа к Интернету во время сборки.источник
Чтобы ответить на ваш вопрос:
Вы можете определить переменную с помощью:
Пробелы вокруг одинакового символа не допускаются.
И использовать его позже с:
источник
Если переменная используется повторно в той же
RUN
инструкции, можно просто установить переменную оболочки. Мне очень нравится, как они подошли к этому с официальным Ruby Dockerfile .источник
RUN foo=$(date) && echo $foo
Вы можете использовать
ARG variable defaultValue
и во время команды запуска вы даже можете обновить это значение, используя--build-arg variable=value
. Чтобы использовать эти переменные в файле Docker, вы можете ссылаться на них как$variable
в команде run.Примечание. Эти переменные будут доступны для команд Linux, например,
RUN echo $variable
и они не будут сохраняться в образе.источник