如何从 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 中使用默认值定义它们。
我有一个包含变量的 .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 中使用默认值定义它们。