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