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

本地正常运行的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:
          - .env
    
    然后执行启动命令:
    docker-compose up --build
    

3. 验证环境变量是否加载成功

可以临时启动容器进入命令行,检查api_key是否存在:

docker run -it --env-file .env 你的镜像名称 /bin/bash
# 在容器内执行
echo $api_key

如果能正常输出API密钥,说明环境变量已正确加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:42:43