Docker:将返回值设置为环境变量

时间:2019-11-02 09:43:33

标签: linux bash docker

我试图创建一个临时文件夹,然后将该路径设置为环境变量,以供以后的Dockerfile指令使用:

FROM alpine

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

RUN echo $TEMPLATES_DIR

以上是我尝试过的方法,知道如何实现吗?

1 个答案:

答案 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>