本地正常运行的Streamlit-Palm API应用Docker部署时API凭证报错
Docker运行Palm API Streamlit应用时的凭证错误解决办法
问题描述
本地环境中,通过.env文件配置Palm API密钥后,Streamlit应用运行正常,但构建为Docker镜像运行时,出现401身份验证失败错误,错误信息如下:
google.api_core.exceptions.Unauthenticated: 401 请求包含无效的身份验证凭证。需要OAuth 2访问令牌、登录Cookie或其他有效的身份验证凭证。
相关核心代码:
API_KEY = os.environ.get('api_key') import google.generativeai as palm palm.configure(api_key=API_KEY)
问题原因
Docker容器默认不会自动加载本地的.env文件,导致容器内无法读取到api_key环境变量,进而触发Palm API的身份验证失败。
解决步骤
1. 确保代码主动加载.env文件
本地环境可能通过shell环境变量自动加载.env,但Docker容器中需要代码显式读取。修改代码如下:
from dotenv import load_dotenv import os import google.generativeai as palm # 加载本地.env文件中的环境变量 load_dotenv() API_KEY = os.environ.get('api_key') palm.configure(api_key=API_KEY)
同时,确保项目的requirements.txt中包含python-dotenv依赖:
streamlit google-generativeai python-dotenv
2. 让Docker容器加载.env变量
有两种可靠方式:
- 方式一:运行容器时传入.env文件
执行以下命令启动容器,直接将本地.env文件传入容器:docker run --env-file .env -p 8501:8501 你的镜像名称 - 方式二:使用Docker Compose管理
创建docker-compose.yml文件,配置自动加载.env:
然后执行启动命令:version: '3.8' services: streamlit-app: build: . ports: - "8501:8501" env_file: - .envdocker-compose up --build
3. 验证环境变量是否加载成功
可以临时启动容器进入命令行,检查api_key是否存在:
docker run -it --env-file .env 你的镜像名称 /bin/bash # 在容器内执行 echo $api_key
如果能正常输出API密钥,说明环境变量已正确加载。
内容的提问来源于stack exchange,提问作者Pragyan Priyadarsini
相关产品推荐
相关产品推荐

