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

Mac Sonoma M1环境下Laravel 11连接Azure SQL Server Edge失败求助

Laravel 11 连接 Azure SQL Edge 失败排查方案

问题背景

在搭载M1芯片的Mac OS Sonoma 14.5系统中,通过Docker部署Microsoft Azure SQL Server Edge,已通过终端命令mssql -u SA -p MyPassword和Azure Data Studio成功连接数据库;PHP 8.2.0已安装SQLSRV与PDO_SQLSRV扩展,但配置Laravel 11的.env后,执行php artisan db:show或php artisan migrate出现连接错误。

.env配置:

DB_CONNECTION=sqlsrv
DB_HOST=localhost
DB_PORT=1433
DB_DATABASE=MyDatabase
DB_USERNAME=SA
DB_PASSWORD=MyPassword

环境信息:

  • PHP 8.2.0
  • Mamp Pro 6.8
  • Microsoft Azure SQL Server EDGE
  • Microsoft Azure Data Studio 1.48.0
  • Docker 4.30.0
  • Laravel 11.0.8
  • Docker容器ID:afb6f21ec9ac

排查步骤

1. 确认Docker端口映射是否正确

检查Azure SQL Edge容器的端口映射状态,确保宿主机1433端口已映射到容器的1433端口:
执行命令:

docker port afb6f21ec9ac

若输出未显示0.0.0.0:1433->1433/tcp或[::]:1433->1433/tcp,说明端口映射未配置,需重新启动容器并添加映射:

docker stop afb6f21ec9ac
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=MyPassword" -p 1433:1433 --name sql-edge -d mcr.microsoft.com/azure-sql-edge

2. 替换DB_HOST为Docker容器IP

M1 Mac的Docker网络可能存在localhost解析异常,尝试直接使用容器IP替代localhost:
先获取容器IP:

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' afb6f21ec9ac

将.env中的DB_HOST替换为获取到的IP(例如172.17.0.2),然后清除Laravel配置缓存:

php artisan config:clear

再执行php artisan db:show测试连接。

3. 验证PHP扩展是否生效

在Laravel项目根目录创建测试文件test-sqlsrv.php,内容如下:

<?php
phpinfo();
?>

通过浏览器访问该文件,搜索sqlsrv和pdo_sqlsrv,确认扩展已加载。
或直接在终端执行:

php -m | grep sqlsrv
php -m | grep pdo_sqlsrv

若未显示这两个扩展,需检查MAMP Pro的PHP扩展配置,确保php.ini中已添加:

extension=sqlsrv.so
extension=pdo_sqlsrv.so

并确认扩展文件路径正确。

4. 检查目标数据库是否存在

通过Azure Data Studio连接数据库,确认MyDatabase已创建。若不存在,先手动创建该数据库,再执行迁移命令。

5. 验证SA账号权限

确保SA账号拥有足够的操作权限,可在Azure Data Studio中执行:

USE master;
GRANT CONTROL SERVER TO [SA];

完成后重新测试Laravel连接。

6. 检查Laravel SQLSRV驱动配置

打开config/database.php,确认sqlsrv连接配置无异常:

'sqlsrv' => [
    'driver' => 'sqlsrv',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '1433'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
],

确保没有额外配置项干扰连接逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:37:10