У своєму Dockerfile я хотів би визначити змінні, які я можу використовувати пізніше в Dockerfile .
Мені відомо ENV
інструкція, але я не хочу, щоб ці змінні були змінними середовища.
Чи є спосіб оголосити змінні в Dockerfile області ?
У своєму Dockerfile я хотів би визначити змінні, які я можу використовувати пізніше в Dockerfile .
Мені відомо ENV
інструкція, але я не хочу, щоб ці змінні були змінними середовища.
Чи є спосіб оголосити змінні в Dockerfile області ?
Відповіді:
Ви можете використовувати ARG
- див. Https://docs.docker.com/engine/reference/builder/#arg
ARG
Інструкція визначає змінну , що користувачі можуть проходити при побудові часу будівельника з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, яка потребує побудови докера для доступу до Інтернету під час збирання.
Щоб відповісти на ваше запитання:
У своєму Dockerfile я хотів би визначити змінні, які я можу використовувати пізніше в Dockerfile.
Ви можете визначити змінну за допомогою:
ARG myvalue=3
Пробіли навколо рівного символу не допускаються.
І використовувати його згодом із:
RUN echo $myvalue > /test
Якщо змінна буде повторно використана в рамках тієї ж RUN
інструкції, можна просто встановити змінну оболонки. Мені дуже подобається, як вони підходили до цього з офіційним Ruby Dockerfile .
RUN foo=$(date) && echo $foo
Ви можете використовувати ARG variable defaultValue
та під час виконання команди навіть можна оновити це значення, використовуючи --build-arg variable=value
. Щоб використовувати ці змінні у файлі docker, ви можете посилати їх як $variable
на команду run.
Примітка. Ці змінні були б доступні для таких команд Linux, RUN echo $variable
і вони не збережуться у зображенні.