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

Docker运行Python RAG脚本时出现TypeError:期望字符串而非NoneType

问题解决:Docker运行RAG脚本时TypeError: str expected, not NoneType

问题原因

本地Windows环境能读取到.env文件中的OPENAI_API_KEY,但Docker容器默认不会自动加载该文件,且你的Dockerfile未将.env复制进容器,也未配置加载逻辑,导致os.getenv('OPENAI_API_KEY')返回None,赋值时触发类型错误。


解决方案1:复制.env到容器并通过python-dotenv加载

  1. 更新requirements.txt
    在requirements.txt中添加python-dotenv依赖,确保容器能安装加载.env的工具:

    # 原有依赖
    python-dotenv
    
  2. 修改Dockerfile
    添加复制.env文件的步骤:

    FROM python:3.8-slim
    
    WORKDIR /rag-test
    
    # 先复制.env文件到容器
    COPY ./.env ./
    COPY ./data  ./data/
    COPY ./basic_rag.py ./main.py
    COPY ./requirements.txt ./
    
    RUN pip install --no-cache-dir -r requirements.txt
    EXPOSE 8080
    
    CMD ["python", "main.py"]
    
  3. 修改basic_rag.py代码
    先加载.env文件再获取密钥:

    from dotenv import load_dotenv
    import os
    
    # 加载.env文件中的环境变量
    load_dotenv()
    # 获取API密钥并校验
    openai_api_key = os.getenv('OPENAI_API_KEY')
    if not openai_api_key:
        raise ValueError("未在.env文件中找到OPENAI_API_KEY")
    os.environ['OPENAI_API_KEY'] = openai_api_key
    

解决方案2:运行容器时直接传入环境变量(更安全)

若不想将包含敏感信息的.env文件打包进镜像,可在运行容器时直接传递环境变量:

  • 直接传入密钥:
    docker run -e OPENAI_API_KEY="你的OpenAI API密钥" 你的镜像名称
    
  • 加载本地.env文件传入:
    docker run --env-file ./.env 你的镜像名称
    

注:此方案无需修改Dockerfile,只需确保脚本中通过os.getenv('OPENAI_API_KEY')获取密钥即可。


额外检查项

  • 确认.env文件中OPENAI_API_KEY的拼写无错误,密钥值无多余空格或特殊字符
  • 若存在.dockerignore文件,检查是否将.env列入排除列表,避免Docker无法复制该文件

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:25:56