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

在Lando环境中运行Laravel Dusk测试失败的问题排查求助

问题根源分析

你遇到的连接拒绝错误,核心原因是Laravel Dusk默认尝试连接的localhost:9515和你的Chromedriver容器的实际地址不匹配:

  • 你的Chromedriver容器运行在Lando的chromedriver服务中,暴露的是4444端口,并且设置了CHROMEDRIVER_URL_BASE: "/wd/hub"作为请求路径
  • Dusk默认配置会去找本地的9515端口,而这个端口在你的appserver容器里并没有运行Chromedriver服务,自然连接失败
具体修复步骤

1. 修改DuskTestCase的驱动配置

打开tests/DuskTestCase.php,找到driver方法,替换成以下代码,让Dusk指向你的Chromedriver容器:

protected function driver()
{
    $options = (new ChromeOptions)->addArguments([
        '--window-size=1920,1080',
        '--disable-gpu',
        '--headless',
        '--no-sandbox', // 加上这个参数避免容器内的权限问题
    ]);

    return RemoteWebDriver::create(
        'http://chromedriver:4444/wd/hub', // 使用Lando服务名作为主机,加上配置的URL路径
        DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY, $options
        )
    );
}

2. 验证容器网络连通性(可选但推荐)

在appserver容器里测试能不能访问Chromedriver服务:

lando ssh -s appserver
curl http://chromedriver:4444/wd/hub/status

如果返回类似{"value":{"ready":true,...}}的JSON,说明网络是通的。

3. 确保Dusk环境变量正确

你的.env.dusk.local里的APP_URL已经设置为http://my-app.lndo.site,这个是对的,因为Chromedriver容器可以通过Lando的内部DNS解析到这个域名。

4. 重新运行测试

现在再次执行Dusk测试:

lando artisan dusk
额外注意事项
  • 你的Chromedriver容器配置里已经加了security_opt: - seccomp:unconfined,这个很重要,能避免Chrome在容器内运行的权限问题
  • 如果你后续调整了Chromedriver的端口或服务名,记得同步修改DuskTestCase.php里的连接地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:14:08