在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
相关产品推荐
相关产品推荐

