You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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配置里的双引号可能被解析转义,导致环境变量未正确传递。可以尝试两种写法:

    1. 改用单引号包裹变量值:
      run: docker container run -d -e MY_KEY='some key' -p 3000:3000 somedockerimage/somedockerimage:0.0.2
      
    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进入容器再执行脚本,此时才能读取到容器内的环境变量。如果脚本在容器外运行,肯定读不到。
  • 检查镜像的启动脚本是否重置环境变量
    如果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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:05:24