这是我的 dockerfile 中的片段
SHELL ["/bin/bash", "-c"]
RUN mkdir -p /tmp/env/
COPY var.env /tmp/env/
RUN . /tmp/env/var.env
即我想将环境变量从文件注入到 docker 容器 但这样做不会加载环境变量。容器启动后,如果我
exec
进入容器并再次执行 source /tmp/env/var.env
,则会加载环境变量,我可以使用 echo $env_name
看到它。
有什么想法吗?
使用 Docker 时,Dockerfile 中的每个 RUN 命令都在新的 shell 会话中执行。这意味着如果您通过获取带有 . /tmp/env/var.env 在 RUN 指令中,这些变量仅在该 shell 会话期间可用。一旦 RUN 命令完成,shell 会话就会结束,所有设置的环境变量都会丢失。
要使环境变量持久存在并在容器启动时可用,您可以在 Dockerfile 中使用 ENV 指令。您可以这样做:
您可以在 Dockerfile 中设置静态环境变量:如果您事先知道环境变量,则可以使用 ENV 指令直接在 Dockerfile 中设置它们。
ENV MY_VARIABLE=myValue
ENV ANOTHER_VARIABLE=anotherValue
或者您可以使用 .env 文件:如果您希望使用 .env 文件来设置环境变量,一种方法是编写一个脚本(或 Dockerfile 中的内联 shell 命令)来读取 .env 文件并对每个变量使用 ENV 指令。然而,这种方法需要一些脚本,并且超出了 Docker 的标准处理。
对于大多数用例,建议直接使用 ENV 指令在 Dockerfile 中设置环境变量。这可确保变量设置正确,并且可用于 Docker 映像构建期间运行的所有命令以及启动时的容器。
如果您绝对需要在容器启动时从 .env 文件加载变量,请考虑在启动命令或入口点脚本 (ENTRYPOINT) 中添加一个步骤,以在启动主应用程序之前获取 .env 文件。