Docker中如何从YAML文件读取.env定义的环境变量并正确解析
问题原因
- 容器运行环境中不存在
VALUE_A、NAME两个环境变量。你本地的.env文件既没有被打包到Docker镜像中,也没有在容器启动时被注入到进程环境列表,Envyaml找不到对应变量就会原样输出占位符内容。 - 默认配置下
EnvYAML不会主动读取项目目录下的.env文件,需要显式指定加载配置。
修复方案
方案1:启动容器时直接传入环境变量(变量少的场景)
不用修改镜像内容,直接在运行命令中加-e参数传入变量即可:
docker run -e VALUE_A=10 -e NAME=SWARNA python-env
方案2:将.env打包进镜像,显式指定加载(无需额外启动参数)
- 修改
Dockerfile,添加.env文件的复制命令,同时安装python-dotenv依赖(供Envyaml读取.env文件):
FROM python:3 ADD envpy.py / ADD env.yml / ADD .env / RUN pip install envyaml python-dotenv CMD [ "python", "./envpy.py" ]
- 修改
envpy.py中Envyaml的初始化参数,指定加载.env文件:
from envyaml import EnvYAML # 显式指定.env文件路径加载变量 env = EnvYAML('env.yml', env_file='.env') print(env['Information']['value']) print(env['Information']['name'])
- 重新构建运行即可:
docker build -t python-env . docker run python-env
方案3:启动时加载本地.env文件(开发场景常用,无需打包.env进镜像)
不需要修改镜像和代码,直接使用docker run自带的--env-file参数加载本地的.env文件注入容器环境:
docker run --env-file .env python-env
内容的提问来源于stack exchange,提问作者swarna
相关产品推荐
相关产品推荐

