Docker: установить возвращаемое значение в качестве переменной среды - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь создать временную папку, а затем установить путь в качестве переменной среды для использования в последующих инструкциях Dockerfile:

FROM alpine

RUN export TEMPLATES_DIR=$(mktemp -d)
ENV TEMPLATES_DIR=$TEMPLATES_DIR

RUN echo $TEMPLATES_DIR

Выше я попробовал, любая идея, как я могудостичь этого?

1 Ответ

2 голосов
/ 02 ноября 2019

Все, что вы запускаете в Dockerfile, будет сохраняться в результирующем образе Docker навсегда. Как правило, вам не нужно использовать переменные среды для указания путей к файловой системе, и нет особого смысла в создании «временных» путей. Просто выберите путь;он даже не должен быть «нормальным» путем Linux, поскольку файловая система контейнера изолирована.

RUN mkdir /templates

Для программ достаточно распространено использование переменных среды для конфигурации (это ключевая часть «12-фактор» () и, таким образом, вы также можете установить для переменной среды фиксированный путь

ENV TEMPLATES_DIR=/templates

В последовательности, которую вы показываете, каждый шаг RUN создает новый контейнер сновая оболочка, и поэтому любые переменные окружения, которые вы задали в команде RUN, теряются в конце этого шага. Вы не можете установить постоянную переменную среды так, как вы описываете; Создание динамических переменных среды во время сборки в Docker обсуждает это далее.

Если это на самом деле временный каталог, и вы собираетесь его очистить, есть еще две возможности. Одним из них является выполнение всей необходимой работы за один шаг RUN, который запускает несколько команд. Переменная окружения не переживет этот шаг RUN, но будет доступна внутри него.

RUN export TEMPLATES_DIR=$(mktemp -d) \
 && echo "$TEMPLATES_DIR" \
 && rm -rf "$TEMPLATES_DIR"

Вторая - использовать многоступенчатую сборку , чтобы выполнить ваш "временно "работать с одним изображением, но затем скопировать его" постоянные "части из этого изображения в конечное изображение, которое вы фактически отправляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...