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

Docker部署Python+ChromeDriver环境Chrome启动崩溃问题求助

Docker中Chrome启动崩溃问题(Ubuntu20.04 + Selenium4.18)

问题背景

本地Mac环境下Python3.12 + Chrome/ChromeDriver123.0.6312.58运行正常,但部署到基于Ubuntu20.04的Docker容器后,Chrome启动崩溃,错误日志如下:

024-03-20 19:53:58 03/20/2024 06:53:58PM - ERROR - helper_functions.py::helper_functions::init:36 - Chrome driver exception: Message: session not created: Chrome failed to start: crashed.
2024-03-20 19:53:58 (disconnected: unable to connect to renderer)
2024-03-20 19:53:58 (The process started from chrome location /usr/local/bin/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

以下是针对性的排查及解决方案:


1. 强制添加无头模式与Docker适配启动参数

Docker容器无图形界面,必须启用Chrome无头模式,并添加Docker环境必备的参数。修改你的Selenium Chrome配置代码:

from selenium.webdriver.chrome.options import Options

def init_chrome_options():
    options = Options()
    # 启用新版无头模式
    options.add_argument("--headless=new")
    # 禁用沙箱(Docker容器无沙箱权限,必须开启)
    options.add_argument("--no-sandbox")
    # 禁用/dev/shm使用(Ubuntu默认/dev/shm空间过小,易导致Chrome崩溃)
    options.add_argument("--disable-dev-shm-usage")
    # 适配容器窗口大小
    options.add_argument("--window-size=1920,1080")
    # 禁用GPU(无头模式无需)
    options.add_argument("--disable-gpu")
    # 忽略证书错误(可选,根据测试场景调整)
    options.add_argument("--ignore-certificate-errors")
    return options

2. 补全Docker镜像中Chrome依赖库

你的Dockerfile已安装部分依赖,但仍可能缺失关键库。更新Dockerfile中的依赖安装命令:

RUN apt-get update && apt-get install -y --no-install-recommends \
    libgbm1 gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
    libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libnss3 lsb-release xdg-utils wget libu2f-udev \
    && apt-get clean && rm -rf /var/lib/apt/lists/*
  • 新增libu2f-udev:Chrome依赖的USB设备支持库
  • 清理apt缓存:减少镜像体积

3. 验证Chrome在容器内的可执行性

进入容器直接测试Chrome是否能运行,排除安装问题:

# 进入运行中的容器
docker exec -it <容器ID> /bin/bash
# 测试Chrome无头模式启动
chrome --headless=new --no-sandbox --disable-dev-shm-usage --dump-dom https://www.google.com
  • 若命令输出HTML内容,说明Chrome本身正常,问题出在Selenium配置
  • 若报错,检查Chrome安装路径或依赖是否缺失

4. 规范Selenium驱动初始化代码

Selenium4.18推荐使用Service类管理驱动,避免旧版写法的兼容性问题:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

options = init_chrome_options()
# 指定ChromeDriver路径
service = Service(executable_path='/usr/local/bin/chromedriver')
driver = webdriver.Chrome(service=service, options=options)

5. 调整容器资源限制

Docker默认内存限制可能不足,Chrome启动需要至少1GB内存,运行容器时增加内存配额:

docker run -m 2g <你的镜像名称>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:46:29