Laravel API/Postman请求报登录超时,Tinker可连接远程SQL Server
可能的原因及解决办法
1. 配置缓存未更新
若之前执行过php artisan config:cache,修改.env或database.php后未重新生成缓存,API请求会加载旧配置导致连接失败。而Tinker在开发环境下默认不读取缓存配置,因此能正常连接。
解决:
- 清除配置缓存:
sail artisan config:clear
- 如需缓存配置,重新生成:
sail artisan config:cache
2. 容器IP未被SQL Server防火墙允许
如果你的Tinker是在WSL2主机而非Sail容器内运行(比如直接在WSL终端执行php artisan tinker而非sail artisan tinker),此时WSL2主机IP在SQL Server防火墙白名单,但Sail容器的IP不在允许列表中,导致API请求(通过容器Web服务)连接超时。
解决:
- 查看Sail容器的IP:
sail inspect laravel.test | grep IPAddress
- 将该IP添加到远程SQL Server的防火墙允许列表;测试环境可直接允许Docker容器所在子网的所有IP访问(生产环境需谨慎)。
3. 数据库连接超时参数缺失
当前database.php中仅配置了编码,未设置连接超时时间,API请求时可能因网络波动导致登录阶段超时。
解决:
在database.php的sqlsrv配置的options中添加连接超时参数:
'options' => [ PDO::SQLSRV_ATTR_CONNECTION_TIMEOUT => 30, // 连接超时时间(秒) PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8 ],
4. WSL2网络转发不稳定
WSL2与Docker容器之间的网络转发偶尔会出现异常,导致容器内的数据库连接请求超时。
解决:
- 重启WSL2:
wsl --shutdown
- 重新启动Sail容器:
sail up -d
内容的提问来源于stack exchange,提问作者joubib
相关产品推荐
相关产品推荐

