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加载
更新requirements.txt
在requirements.txt中添加python-dotenv依赖,确保容器能安装加载.env的工具:# 原有依赖 python-dotenv修改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"]修改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
相关产品推荐
相关产品推荐

