Django+Selenium Docker构建报错:Selenium 255初始化错误求助
Django项目Docker化Selenium环境初始化错误(错误码255)
我的Django项目中有一个模块,通过API传递信息给Selenium处理,但在Docker中构建Selenium环境时出现问题,日志显示Selenium初始化错误,错误码255。当前使用的是最新版geckodriver,奇怪的是两天前代码还能正常运行。
以下是我的Dockerfile:
FROM python:3.9 LABEL autor="LOADER" LABEL description="APP" WORKDIR /usr/src/html_loader/ COPY . /usr/src/html_loader/ RUN apt-get update RUN echo "Y" | apt-get install alien RUN echo "Y" | apt-get install gunicorn RUN echo "Y" | apt-get install memcached RUN echo "Y" | apt-get install unixodbc RUN echo "Y" | apt-get install unixodbc-dev RUN echo "Y" | apt-get install cifs-utils RUN echo "Y" | apt-get install libgtk-3-dev RUN echo "Y" | apt-get install libgtk-3-0 RUN echo "Y" | apt-get install libdbus-glib-1-2 RUN echo "Y" | apt-get install xvfb RUN apt-get install libaio1 RUN echo "deb http://deb.debian.org/debian/ unstable main contrib non-free" >> /etc/apt/sources.list.d/debian.list RUN apt-get update RUN echo "Y" | apt-get install -y --no-install-recommends firefox RUN apt-get update && apt-get install -y wget bzip2 libxtst6 libgtk-3-0 libx11-xcb-dev libdbus-glib-1-2 libxt6 libpci-dev && rm -rf /var/lib/apt/lists/* ENV pip=pip3 ENV python=python3 ENV DJANGO_HOST="http://crawlerdjango:4333" RUN pip install --upgrade pip COPY requirements.txt . RUN pip3 install -r requirements.txt RUN apt-get update --allow-releaseinfo-change RUN Xvfb & EXPOSE 4666 EXPOSE 4777
排查方向与修复建议
- 版本兼容性问题:你用了最新版geckodriver,但Dockerfile从unstable源安装Firefox,可能版本更新后两者不兼容。建议指定Firefox稳定版本,比如
apt-get install -y firefox=115.0.3-1~deb12u1,确保和geckodriver版本匹配。 - Xvfb启动方式错误:Dockerfile中
RUN Xvfb &仅在构建阶段启动,容器运行时不会自动启动。需将Xvfb启动逻辑放到启动脚本中,比如创建start.sh:
然后在Dockerfile末尾添加:#!/bin/bash Xvfb :99 -screen 0 1024x768x16 & export DISPLAY=:99 # 替换为你的Django启动命令 gunicorn your_django_app.wsgi:application --bind 0.0.0.0:4666COPY start.sh . RUN chmod +x start.sh CMD ["./start.sh"] - 依赖清理与源调整:Dockerfile中重复安装了
libgtk-3-0、libdbus-glib-1-2等依赖,可清理重复命令减少潜在问题。另外unstable源软件包不稳定,建议换成stable源安装Firefox。 - Selenium代码配置优化:检查你的Selenium初始化代码,确保指定正确的Firefox路径并启用headless模式:
from selenium import webdriver from selenium.webdriver.firefox.options import Options options = Options() options.headless = True options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Firefox(options=options)
内容的提问来源于stack exchange,提问作者Mironova Lari
相关产品推荐
相关产品推荐

