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

Laravel Sail中Puppeteer调用Chrome失败问题求助

解决Docker中Laravel生成PDF找不到Chrome的问题

1. 定位容器内Chrome的实际路径

先在Docker容器里执行命令,找到Chrome的安装路径:

which chrome
# 或者针对Chromium
which chromium-browser

常见路径包括 /usr/bin/chromium-browser 或 Puppeteer自带的路径 /node_modules/puppeteer/.local-chromium/linux-*/chrome-linux/chrome

2. 给Laravel的PDF生成工具指定Chrome路径

如果用的是Spatie Browsershot(主流的Puppeteer-based Laravel PDF工具),有两种配置方式:

代码内直接指定

修改你的PDF生成代码,添加Chrome路径配置:

use Spatie\Browsershot\Browsershot;

Browsershot::html(view($layout, ['invoice' => $invoice])->render())
    ->setChromePath('/usr/bin/chromium-browser') // 替换为你找到的实际路径
    ->setOption('args', ['--no-sandbox', '--disable-setuid-sandbox'])
    ->save(storage_path("app/public/{$path}/invoice_{$invoice['invoice_number']}.pdf"));

全局环境变量配置

在.env文件中添加:

BROWSERSHOT_CHROME_PATH=/usr/bin/chromium-browser

如果还没发布Browsershot配置,先执行:

php artisan vendor:publish --provider="Spatie\Browsershot\BrowsershotServiceProvider"

然后在config/browsershot.php中对应位置修改:

'chrome_path' => env('BROWSERSHOT_CHROME_PATH', null),

3. 检查Puppeteer脚本的路径配置

如果是自定义Node脚本调用Puppeteer,确保脚本里明确指定Chrome的executablePath:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    executablePath: '/usr/bin/chromium-browser', // 替换为实际路径
    args: ['--no-sandbox', '--disable-setuid-sandbox']
  });
  // 生成PDF的逻辑
  await browser.close();
})();

4. 验证文件权限

确保Laravel运行用户(通常是www-data)能访问Chrome可执行文件,执行:

chmod +x /usr/bin/chromium-browser

5. 确认版本兼容性

检查你用的Laravel PDF工具(比如Browsershot)是否支持当前Chrome版本(135.0.7049.84),版本不兼容的话,升级或降级对应包即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:08:25