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

本地正常的Flask+Selenium爬虫部署Google Run时出现500错误求助

问题描述

我用Selenium和Flask开发了一个动态网站爬虫,本地运行完全正常,但通过Docker部署到Google Run后出现500错误。

错误信息

栈追踪片段:

Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1463, in wsgi_app
response = self.full_dispatch_request()

请求日志:

GET500921B1.1 sChrome 123 https://flask-selenium-app-qs6rhz6vcq-du.a.run.app/

当前配置信息

requirements.txt:

flask==3.0.2
beautifulsoup4==4.12.3
selenium==4.19.0
gunicorn==21.2.0

wsgi.py:

if __name__ == "__main__":
    app.run(port=8080)

Docker CMD配置:

CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8080", "wsgi:app"]     app.run(port=8080)

容器使用Python 3.12版本,端口已设置为8080。


问题排查与解决

1. 修复Docker CMD配置错误

你提供的Docker CMD里存在冗余代码,app.run(port=8080)不应该出现在CMD指令中,正确的CMD配置应为:

CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8080", "wsgi:app"]

冗余代码会导致容器启动时执行逻辑混乱,直接触发500错误。

2. 配置Selenium无头运行模式

Google Run容器属于无头环境,本地运行时依赖的带界面Chrome无法在容器中正常工作,必须为Selenium配置无头参数:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def init_chrome_driver():
    chrome_options = Options()
    # 无头环境核心配置
    chrome_options.add_argument("--headless=new")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--disable-gpu")
    return webdriver.Chrome(options=chrome_options)
  • --headless=new:启用新版无头模式,兼容性更好
  • --no-sandbox:容器环境下必须禁用沙箱,否则Chrome无法启动
  • --disable-dev-shm-usage:避免容器内共享内存空间不足的问题
  • --disable-gpu:无头环境无需GPU加速,禁用以减少资源占用

3. 在容器内安装Chrome浏览器

requirements.txt仅包含Selenium依赖,但容器中没有Chrome浏览器及驱动,需在Dockerfile中添加安装步骤(以Debian基础镜像为例):

# 更新源并安装Chrome及驱动
RUN apt-get update && apt-get install -y \
    chromium \
    chromium-driver \
    && rm -rf /var/lib/apt/lists/*

# 将ChromeDriver加入系统路径
ENV PATH="/usr/lib/chromium-browser/:${PATH}"

4. 调整Google Run资源配额

Chrome运行需要一定资源,默认的Google Run资源配额可能不足以支撑,建议将服务配置调整为至少1CPU + 1GB内存,避免因资源不足导致Chrome崩溃。

5. 获取完整错误日志

当前栈追踪不完整,建议开启Flask异常传播并查看Google Run完整日志:
在Flask代码中添加:

app.config['PROPAGATE_EXCEPTIONS'] = True

同时在Google Cloud Console的Cloud Run服务详情页,查看完整的容器日志,定位具体的异常触发点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:07:24