В моем файле Dockerfile я хотел бы определить переменные, которые я могу использовать позже в Dockerfile.
Я знаю инструкцию ENV
, но я не хочу, чтобы эти переменные были переменными среды.
Есть ли способ объявлять переменные в области Dockerfile?
В моем файле Dockerfile я хотел бы определить переменные, которые я могу использовать позже в Dockerfile.
Я знаю инструкцию ENV
, но я не хочу, чтобы эти переменные были переменными среды.
Есть ли способ объявлять переменные в области Dockerfile?
Вы можете использовать ARG
- см. https://docs.docker.com/engine/reference/builder/#arg
Команда
ARG
определяет переменную, которую пользователи могут передать в build-time для строителя с помощью командыdocker build
, используя--build-arg <varname>=<value>
. Если пользователь указывает сборку аргумент, который не был определен в файле Docker, сборка выводит ошибка.
Насколько мне известно, только ENV
позволяет, как указано в "замена среды"
Переменные среды (объявленные с помощью оператора
ENV
) также могут использоваться в некоторых инструкциях как переменные, которые должны интерпретироваться в файле Docker.
Они должны быть переменными окружения, чтобы быть обновленными в каждом новом контейнере, созданном для каждой строки файла Docker, на docker build
.
Другими словами, эти переменные не интерпретируются непосредственно в файле Docker, а в контейнере, созданном для строки Dockerfile, поэтому используется переменная среды.
В этот день я использую ARG
(docker 1.10+ и docker build --build-arg var=value
) и ENV
.
Использование только ARG
означает, что ваша переменная видна во время сборки, а не во время выполнения.
Мой файл Docker обычно имеет:
ARG var
ENV var=${var}
В вашем случае достаточно ARG
: я обычно использую его для установки переменной http_proxy, что требует сборка докеры для доступа к Интернету во время сборки.
Чтобы ответить на ваш вопрос:
В моем Dockerfile я хотел бы определить переменные, которые я смогу использовать позже в Dockerfile.
Вы можете определить переменную с помощью:
ARG myvalue=3
Пробелы вокруг одинакового символа недопустимы.
И используйте его позже с:
RUN echo $myvalue > /test
Если переменная повторно используется в той же инструкции RUN
, можно просто установить переменную оболочки. Мне очень нравится, как они подошли к этому с официальным допинг файлом Ruby.
Вы можете использовать ARG variable defaultValue
, а во время команды запуска вы даже можете обновить это значение, используя --build-arg variable=value
. Чтобы использовать эти переменные в файле Docker, вы можете указать их как $variable
в команде run.
Примечание: Эти переменные будут доступны для команд Linux, таких как RUN echo $variable
, и они не будут сохраняться в образе.