gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:09:49 26 4
gpt4 key购买 nike

我正在尝试创建一个临时文件夹,然后将路径设置为环境变量,以便在以后的 Dockerfile 说明中使用:

FROM alpine

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

RUN echo $TEMPLATES_DIR

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

最佳答案

您在 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在一张图片中进行“临时”工作,然后将其“永久”部分从该图片复制到您实际发布的最终图片中。

关于linux - Docker:将返回值设置为环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58669894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com