Laravel Sail安装MS SQL驱动后遇‘could not find driver’错误
解决Laravel Sail中MS SQL驱动"could not find driver"错误
问题根源分析
你的Dockerfile中存在命令执行逻辑错误,导致SQL Server PHP驱动没有被正确启用,这是出现"could not find driver"的核心原因。另外还需要确保驱动同时加载到PHP CLI和FPM环境中。
修复步骤
1. 修正Dockerfile中的驱动启用逻辑
你当前的Dockerfile里,su和exit命令会中断后续的phpenmod执行(因为su进入子shell后,exit回到原shell,后续命令不会被执行)。将对应的代码块替换为以下内容:
# Install the PHP drivers for Microsoft SQL Server RUN curl -O https://pear.php.net/go-pear.phar \ && php go-pear.phar RUN pecl install sqlsrv \ && pecl install pdo_sqlsrv \ && printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.1/mods-available/sqlsrv.ini \ && printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.1/mods-available/pdo_sqlsrv.ini \ && phpenmod -v 8.1 sqlsrv pdo_sqlsrv
注:Dockerfile的
RUN命令默认以root用户执行,无需额外su切换身份。
2. 强制为PHP CLI和FPM加载驱动
为避免驱动仅在单一环境生效,在Dockerfile末尾添加以下代码,确保CLI和FPM都能加载SQL Server驱动:
# 确保PHP CLI与FPM均加载SQL Server驱动 RUN echo "extension=sqlsrv.so" >> /etc/php/8.1/cli/php.ini \ && echo "extension=pdo_sqlsrv.so" >> /etc/php/8.1/cli/php.ini \ && echo "extension=sqlsrv.so" >> /etc/php/8.1/fpm/php.ini \ && echo "extension=pdo_sqlsrv.so" >> /etc/php/8.1/fpm/php.ini
3. 重新构建并启动容器
执行以下命令彻底重建容器:
sail down -v sail build --no-cache sail up -d
4. 验证驱动是否成功加载
进入容器检查驱动状态:
# 检查CLI环境的驱动 sail exec laravel.test php -m | grep sqlsrv # 检查PDO驱动 sail exec laravel.test php -i | grep pdo_sqlsrv
如果输出包含sqlsrv和pdo_sqlsrv,说明驱动已正确加载。
5. 确认.env配置正确性
确保MS SQL连接配置使用正确的驱动:
DB_CONNECTION=mssql DB_HOST=你的MS SQL服务器地址 DB_PORT=1433 DB_DATABASE=目标数据库名 DB_USERNAME=数据库账号 DB_PASSWORD=数据库密码 # 若使用SQL Server认证,需添加以下配置 DB_ENCRYPT=true DB_TRUST_SERVER_CERTIFICATE=true
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

