Docker中Python运行Selenium Chrome失败问题求助
解决Docker容器中Selenium Chrome无法启动的问题
本地正常运行的网页爬虫,在Docker容器中执行时触发SessionNotCreatedException,错误提示Chrome启动后异常退出、DevToolsActivePort文件不存在,核心修复点如下:
1. 修复Python代码中的ChromeOptions重置问题
原代码里配置完所有Chrome启动参数后,又重复执行了chrome_options = Options(),导致之前的所有配置全部丢失,这是Chrome无法启动的核心原因。同时补充缺失的依赖导入,并升级无头模式参数:
修复后的scrape_ev_files.py关键代码:
import os from selenium import webdriver from selenium.webdriver.chrome.service import Service # 补充缺失的Options导入 from selenium.webdriver.chrome.options import Options def init_driver(local_download_path): os.makedirs(local_download_path, exist_ok=True) # Set Chrome Options chrome_options = Options() # 使用Selenium 4.10+推荐的新版无头模式,兼容性更强 chrome_options.add_argument("--headless=new") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--remote-debugging-port=9222") # 添加窗口大小参数,避免无头模式下布局异常 chrome_options.add_argument("--window-size=1920,1080") prefs = { "download.default_directory": local_download_path, "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing.enabled": True } chrome_options.add_experimental_option("prefs", prefs) # Set up the driver service = Service() # 移除重复的chrome_options = Options(),保留之前的配置 driver = webdriver.Chrome(service=service, options=chrome_options) # Set download behavior driver.execute_cdp_cmd("Page.setDownloadBehavior", { "behavior": "allow", "downloadPath": local_download_path }) return driver # 剩余主函数代码保持不变
2. 调整Dockerfile的权限与镜像优化
确保seluser对工作目录有读写权限,同时清理冗余缓存减小镜像体积:
修复后的Dockerfile:
FROM selenium/standalone-chrome:latest # 设置工作目录 WORKDIR /usr/src/app # 复制应用文件 COPY . . # 以root用户安装Python依赖 USER root RUN apt-get update && apt-get install -y --no-install-recommends python3 python3-pip python3-venv \ && rm -rf /var/lib/apt/lists/* # 清理APT缓存,减小镜像体积 # 创建虚拟环境并安装Python依赖 RUN python3 -m venv venv \ && . venv/bin/activate && pip install --no-cache-dir -r requirements.txt # 确保seluser拥有当前目录的读写权限 RUN chown -R seluser:seluser /usr/src/app # 切换回seluser运行程序 USER seluser # 启动命令 CMD ["/bin/bash", "-c", "source venv/bin/activate && python -m scrape_ev_files"]
3. 容器运行优化(可选)
运行容器时添加共享内存参数,避免容器内内存不足导致Chrome崩溃:
docker build -t my_scraper . docker run --rm -t --shm-size=2g my_scraper
内容的提问来源于stack exchange,提问作者Max Power
相关产品推荐
相关产品推荐

