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

Splash测试页面超时问题排查(Windows+Docker环境)

解决Docker中Splash超时设置不生效的问题

我之前在Windows上用Docker跑Splash时,也踩过超时设置不生效的坑,折腾了好一阵才搞定。下面一步步给你拆解解决思路:

1. 先确认Docker启动参数是否正确传递全局最大超时

Splash的全局最大超时上限是在启动容器时通过命令行参数定义的,默认90秒。你必须把--max-timeout参数放在镜像名后面(Docker的参数规则:镜像名之后的是容器内部程序的参数),比如要改成300秒(5分钟):

docker run -p 8050:8050 scrapinghub/splash --max-timeout 300

如果之前已经启动过Splash容器,得先停掉旧容器再重新启动:

# 停止容器(假设容器名是splash)
docker stop splash
# 删除容器
docker rm splash
# 后台启动带新参数的容器
docker run -d --name splash -p 8050:8050 scrapinghub/splash --max-timeout 300

2. 验证全局超时是否生效

启动后打开Splash的测试页面http://localhost:8050,拉到页面底部的Render Options区域,看timeout的最大值是不是你设置的300秒。如果还是90,说明启动参数没生效——大概率是你把--max-timeout写在了镜像名前面(那会被当成Docker的参数,而不是Splash的)。

3. 自定义脚本必须显式设置超时

就算全局最大超时改了,如果你在Lua脚本里没主动设置超时,Splash还是会用默认的30秒(测试页面的默认值)。所以脚本里一定要加上set_timeout,而且数值不能超过你设置的全局上限:

比如在测试页面的Lua Script标签里写:

function main(splash, args)
    splash:set_timeout(300) -- 和全局最大超时保持一致或更小
    -- 你的长执行逻辑,比如等待慢加载的页面
    assert(splash:go(args.url))
    assert(splash:wait(150)) -- 等待150秒,这时候就不会触发超时了
    return splash:png()
end

如果用HTTP API调用,也要显式带上timeout参数:

curl 'http://localhost:8050/render.html?url=http://your-slow-page.com&timeout=300'

4. Windows Docker的特殊坑点

Windows上的Docker Desktop有时候会因为缓存或配置挂载问题导致参数不生效,可以试试:

  • 重启Docker Desktop,清除容器缓存
  • 如果用Docker Compose管理,要在docker-compose.yml里明确配置Splash的命令参数:
version: '3'
services:
  splash:
    image: scrapinghub/splash
    ports:
      - "8050:8050"
    command: --max-timeout 300

然后重新部署:

docker-compose down
docker-compose up -d

5. 排查系统层面的限制

如果还是超时,可能是Docker容器的资源配额不够(比如CPU/内存不足导致页面加载被强制终止)。可以打开Docker Desktop的设置,给Splash容器分配更多的内存和CPU资源试试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:49:41