Docker容器中使用llama_index.WholeSiteReader遇SessionNotCreatedException
解决Docker容器中使用WholeSiteReader的SessionNotCreatedException问题
问题根源
Docker容器默认是无GUI环境,Chrome启动需要桌面支持,且默认配置未适配容器环境,导致DevToolsActivePort文件不存在、Chrome进程异常退出。另外需确保Chrome与chromedriver版本严格匹配,否则也会引发兼容性问题。
解决步骤
1. 在Docker镜像中安装Chrome、chromedriver及依赖
以下是Dockerfile片段,以Python镜像为基础:
# 基础镜像 FROM python:3.10-slim # 安装Chrome运行依赖 RUN apt-get update && apt-get install -y \ wget \ gnupg \ libnss3 \ libgconf-2-4 \ libxss1 \ libasound2 \ fonts-liberation \ libappindicator3-1 \ xdg-utils \ && rm -rf /var/lib/apt/lists/* # 安装Chrome稳定版 RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \ && apt-get update && apt-get install -y google-chrome-stable # 安装对应版本的chromedriver RUN CHROME_VERSION=$(google-chrome --version | grep -oP '\d+\.\d+\.\d+\.\d+') \ && wget -O /tmp/chromedriver.zip https://storage.googleapis.com/chrome-for-testing-public/$CHROME_VERSION/linux64/chromedriver-linux64.zip \ && unzip /tmp/chromedriver.zip -d /usr/local/bin/ \ && chmod +x /usr/local/bin/chromedriver-linux64/chromedriver \ && ln -s /usr/local/bin/chromedriver-linux64/chromedriver /usr/bin/chromedriver
2. 手动配置Chrome选项并传入WholeSiteReader
默认的setup_driver方法未添加容器环境所需的Chrome参数,需手动创建带适配选项的WebDriver,再传给WholeSiteReader:
from llama_index.readers.web import WholeSiteReader from selenium import webdriver from selenium.webdriver.chrome.options import Options def get_chrome_driver(): chrome_options = Options() # 无头模式,无需GUI chrome_options.add_argument("--headless=new") # 禁用沙箱,容器环境必需 chrome_options.add_argument("--no-sandbox") # 禁用/dev/shm使用,避免容器内存限制问题 chrome_options.add_argument("--disable-dev-shm-usage") # 指定临时目录,解决DevToolsActivePort问题 chrome_options.add_argument("--user-data-dir=/tmp/chrome-user-data") # 禁用GPU加速 chrome_options.add_argument("--disable-gpu") return webdriver.Chrome(options=chrome_options) # 传入自定义driver初始化WholeSiteReader driver = get_chrome_driver() test = WholeSiteReader(prefix="https://suryaanshrai.blogspot.com/", driver=driver)
3. 验证版本匹配
执行以下命令确认Chrome与chromedriver版本一致:
google-chrome --version chromedriver --version
若版本不匹配,重新安装对应版本的chromedriver。
内容的提问来源于stack exchange,提问作者Suryaansh Rai
相关产品推荐
相关产品推荐

