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

Laravel Sail环境下使用Spatie Browsershot与Puppeteer生成网页截图时Chromium缺失问题求助

解决Laravel Sail环境中Browsershot/Puppeteer找不到Chromium的问题

我之前在Laravel Sail的Docker环境里折腾Browsershot时,遇到过和你完全一样的Chromium找不到的问题,给你分享几个亲测有效的解决办法:


方法1:重新在Sail容器内安装Puppeteer(最直接)

很多时候这个错误是因为Puppeteer在安装时,没有成功下载对应版本的Chromium(Docker环境下网络或者权限限制导致)。你可以按以下步骤操作:

  1. 进入Sail的容器终端:
    sail shell
    
  2. 切换到项目根目录(默认已经在/var/www/html),然后强制重新安装Puppeteer:
    npm install puppeteer --force
    
    如果是网络问题导致下载失败,可以换国内npm源试试:
    npm install puppeteer --registry=https://registry.npmmirror.com --force
    
    要是碰到权限问题,加上--unsafe-perm参数(Docker容器内root用户运行时可能需要):
    npm install puppeteer --unsafe-perm=true --force
    

安装完成后,再尝试生成截图,大部分情况下这个方法就能解决问题。


方法2:安装系统版Chromium并指定路径

如果方法1不行,你可以在Sail的Docker镜像里直接安装系统级的Chromium,然后让Browsershot指向它:

第一步:修改Docker配置

如果你用的是自定义的Dockerfile(或者通过docker-compose.override.yml扩展Sail),添加以下内容来安装Chromium:

# 在你的Dockerfile中添加
RUN apt-get update && apt-get install -y \
    chromium-browser \
    && rm -rf /var/lib/apt/lists/*

然后重建Sail镜像:

sail build --no-cache

第二步:在代码中指定Chromium路径

在调用Browsershot的时候,通过setChromePath方法指定系统Chromium的路径:

use Spatie\Browsershot\Browsershot;

Browsershot::url('https://google.com')
    ->setChromePath('/usr/bin/chromium-browser')
    ->setViewportWidth(800)
    ->setViewportHeight(600)
    ->save(storage_path('app/public/screenshot.png'));

方法3:直接指向Puppeteer自带的Chromium路径

如果Puppeteer已经成功安装,只是Browsershot没找到它自带的Chromium,你可以先找到这个路径,再手动指定:

  1. 在Sail容器内运行以下命令找到Chromium的位置:

    find /var/www/html/node_modules -name chrome -type f
    

    你会得到类似这样的路径:/var/www/html/node_modules/puppeteer/.local-chromium/linux-856583/chrome-linux/chrome

  2. 把这个路径传给Browsershot的setChromePath方法即可:

    Browsershot::url('https://google.com')
        ->setChromePath('/var/www/html/node_modules/puppeteer/.local-chromium/linux-856583/chrome-linux/chrome')
        ->save(storage_path('app/public/screenshot.png'));
    

额外提示:

如果还是碰到问题,记得检查:

  • 容器内的storage/app/public目录是否有写入权限(可以用sail artisan storage:link确保软链接正确)
  • 调用Browsershot时是否需要添加额外的Chrome启动参数,比如在Docker环境下可能需要加--no-sandbox和--disable-dev-shm-usage:
    Browsershot::url('https://google.com')
        ->addChromeArguments(['--no-sandbox', '--disable-dev-shm-usage'])
        ->save(...)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:22:40