Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Насколько мне известно, только 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, что требует сборка докеры для доступа к Интернету во время сборки.

Ответ 3

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

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

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

ARG myvalue=3

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

И используйте его позже с:

RUN echo $myvalue > /test

Ответ 4

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

Ответ 5

Вы можете использовать ARG variable defaultValue, а во время команды запуска вы даже можете обновить это значение, используя --build-arg variable=value. Чтобы использовать эти переменные в файле Docker, вы можете указать их как $variable в команде run.

Примечание: Эти переменные будут доступны для команд Linux, таких как RUN echo $variable, и они не будут сохраняться в образе.