Python无法读取GitHub Actions中Docker容器传入的MY_KEY环境变量
Docker环境变量在Python中无法读取的问题解决
问题场景
我在GitHub Actions中通过以下docker container run命令传递环境变量:
run: docker container run -d -e MY_KEY="some key" -p 3000:3000 somedockerimage/somedockerimage:0.0.2
这种方式在Node.js项目中能正常读取到环境变量,但用Python代码读取时:
import os api_key = os.environ['MY_KEY'] print(api_key)
却抛出了KeyError错误:
File "print.py", line 4, in <module> api_key = os.environ['MY_KEY'] File "/usr/lib/python3.8/os.py", line 675, in __getitem__ raise KeyError(key) from None KeyError: 'MY_KEY'
可能的原因及解决办法
修正GitHub Actions中的引号转义问题
YAML配置里的双引号可能被解析转义,导致环境变量未正确传递。可以尝试两种写法:- 改用单引号包裹变量值:
run: docker container run -d -e MY_KEY='some key' -p 3000:3000 somedockerimage/somedockerimage:0.0.2 - 使用YAML多行字符串格式避免转义:
run: | docker container run -d -e MY_KEY="some key" -p 3000:3000 somedockerimage/somedockerimage:0.0.2
- 改用单引号包裹变量值:
确认Python脚本的执行上下文
必须保证Python脚本在目标容器内部执行:- 要么通过Dockerfile的
CMD或ENTRYPOINT配置,让容器启动时自动运行脚本; - 要么在容器启动后用
docker exec进入容器再执行脚本,此时才能读取到容器内的环境变量。如果脚本在容器外运行,肯定读不到。
- 要么通过Dockerfile的
检查镜像的启动脚本是否重置环境变量
如果Docker镜像的ENTRYPOINT或CMD脚本中有重置环境变量的操作,会导致传入的MY_KEY被清除。可以先在容器内执行echo $MY_KEY验证变量是否存在,再运行Python脚本,同时检查Dockerfile的相关配置。改用更安全的环境变量读取方式
直接用os.environ['MY_KEY']会因变量缺失直接崩溃,建议改用os.getenv(),变量不存在时返回None,方便调试:import os api_key = os.getenv('MY_KEY') print(api_key)
内容的提问来源于stack exchange,提问作者YanivCode
相关产品推荐
相关产品推荐

