我试图创建一个临时文件夹,然后将该路径设置为环境变量,以供以后的Dockerfile指令使用:
FROM alpine
RUN export TEMPLATES_DIR=$(mktemp -d)
ENV TEMPLATES_DIR=$TEMPLATES_DIR
RUN echo $TEMPLATES_DIR
以上是我尝试过的方法,知道如何实现吗?
答案 0 :(得分:2)
您在Dockerfile中运行的所有内容都会永久保留在生成的Docker映像中。通常,您不需要使用环境变量来指定文件系统路径,并且创建“临时”路径没有多大意义。只是选择一条路;因为容器文件系统是隔离的,所以它甚至不必是“常规” Linux路径。
RUN mkdir /templates
程序通常使用环境变量进行配置(这是"12-factor"设计的关键部分),因此您也可以将环境变量设置为固定路径
ENV TEMPLATES_DIR=/templates
按照您显示的顺序,每个RUN
步骤都会创建一个带有新shell的新容器,因此在RUN
命令中设置的所有环境变量都将在该步骤结束时丢失。您不能按照描述的方式设置持久性环境变量。 Create dynamic environment variables at build time in Docker对此进行了进一步讨论。
如果它实际上是一个临时目录,并且您打算清理它,那么还有两种可能。一种是在运行多个命令的单个RUN
步骤内完成所有您需要的工作。环境变量不会超过该RUN
步骤,但可以在其中访问。
RUN export TEMPLATES_DIR=$(mktemp -d) \
&& echo "$TEMPLATES_DIR" \
&& rm -rf "$TEMPLATES_DIR"
第二种方法是使用multi-stage build在一张图像中进行“临时”工作,然后将其“永久”部分从该图像中复制到您实际要运送的最终图像中。 / p>