WSL2 Ubuntu24.04下Laravel连接SQL Server报could not find driver错误
Laravel Sail连接SQL Server提示"could not find driver"的排查方案
核心注意点:WSL本地PHP与Sail容器PHP是独立环境
你在WSL本地安装的PHP扩展和Laravel Sail容器内的PHP环境完全分离——本地php -m看到的扩展加载状态,和容器里的PHP没有关联,这是最容易忽略的问题。
具体排查与解决步骤
1. 检查Sail容器内的PHP扩展是否加载
执行以下命令进入容器并查看扩展状态:sail exec laravel.test php -m | grep sqlsrv如果输出里没有
pdo_sqlsrv和sqlsrv,说明容器内未安装对应扩展,需要进行下一步操作。2. 修改Dockerfile,在Sail容器内安装SQL Server扩展与ODBC驱动
在项目根目录的Dockerfile中,添加以下内容(放在PHP扩展安装相关代码段后):# 安装Microsoft ODBC驱动依赖 RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ && curl https://packages.microsoft.com/config/ubuntu/24.04/prod.list > /etc/apt/sources.list.d/mssql-release.list \ && apt-get update \ && ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev # 安装并启用sqlsrv、pdo_sqlsrv扩展 RUN pecl install sqlsrv pdo_sqlsrv \ && docker-php-ext-enable sqlsrv pdo_sqlsrv然后重新构建容器:
sail build --no-cache3. 验证容器内PHP配置
进入容器查看PHP配置文件路径,确认扩展已被正确启用:sail exec laravel.test php --ini找到输出中的
Loaded Configuration File,查看该文件内是否存在extension=pdo_sqlsrv.so和extension=sqlsrv.so(使用docker-php-ext-enable会自动添加,一般无需手动修改)。4. 确认Laravel数据库配置准确性
- 确保
.env文件中DB_CONNECTION的值为sqlsrv,而非mysql或其他; - 检查
DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD与DBeaver的连接参数完全一致。如果是连接Windows主机上的SQL Server,DB_HOST需设置为host.docker.internal。
- 确保
5. 清理Laravel配置缓存
执行命令清理缓存,避免旧配置干扰:sail artisan config:clear sail artisan cache:clear
内容的提问来源于stack exchange,提问作者Matheus Inacio
相关产品推荐
相关产品推荐

