如何从 docker 中的 YAML 文件读取环境变量?

How to read environment variables from YAML file in docker?

我有一个包含变量的 .env 文件

VALUE_A=10
NAME=SWARNA

我有一个 env.yml 文件。

Information:
   value: $VALUE_A
   name: $NAME

我有一个 python 文件 envpy.py

from envyaml import EnvYAML

# read file env.yml and parse config
env = EnvYAML('env.yml')

print(env['Information']['value'])

print(env['Information']['name'])

这是我的 Dockerfile

FROM python:3
ADD envpy.py /
ADD env.yml /
RUN pip install envyaml
CMD [ "python", "./envpy.py" ]

预期 output

10
SWARNA

但是我得到了:

VALUE_A
NAME

我正在使用命令构建 docker 和 运行:

docker build -t python-env .

docker run python-env

如何打印值。请纠正我或建议我哪里做错了。谢谢。

.env 是一个 docker-compose 的东西,它定义了要插入到 docker-compose.yml 中的环境变量的默认值,并且只在那里。它们在其他任何地方都不可用,当然也不在您的图像中。

您可以通过将 .env 复制到图像中并在您的 Python 代码中执行

使这些值可用作图像中的环境变量
from dotenv import load_dotenv
load_dotenv()

(需要安装 dotenv)。

另外请注意,可能有更好的方法来实现您想要的:

  • 如果必须在构建时设置这些值,您宁愿在构建时将它们插入到生成的文件中,并将具有硬编码值的文件复制到图像中。
  • 如果值应该在运行时被覆盖,只需通过 ENV 在 Dockerfile 中使用默认值定义它们。