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

Docker容器中PHP无法对接SQL Server,报sqlsrv_connect未定义错误

问题原因

你遇到的核心问题有两个:

  • 未指定sqlsrv/pdo_sqlsrv扩展版本:最新版的sqlsrv扩展已不再支持PHP7.3,pecl默认安装的高版本扩展和你的PHP版本不兼容,编译后无法被PHP正常加载,所以phpinfo中看不到扩展信息,调用相关函数时报未定义错误。
  • 微软源与系统版本不匹配:你使用的php:7.3-apache基础镜像基于Debian系统,你配置的是Ubuntu 20.04的微软软件源,安装的ODBC驱动和系统不兼容。
解决步骤
  1. 替换微软软件源为对应Debian版本的地址
    php:7.3-apache对应Debian 10(Buster)版本,将原来添加Ubuntu源的两行替换为Debian 10的源配置:
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list 
  1. 指定兼容PHP7.3的sqlsrv扩展版本安装
    将原来的pecl安装命令修改为指定5.9.0版本(该版本是最后一个支持PHP7.3的sqlsrv稳定版本):
RUN pecl install sqlsrv-5.9.0 pdo_sqlsrv-5.9.0
RUN docker-php-ext-enable sqlsrv pdo_sqlsrv
  1. 清理旧镜像缓存,重新构建
    执行以下命令避免旧缓存影响:
docker-compose down -v
docker-compose build --no-cache
docker-compose up -d
  1. 验证扩展是否正常加载
    容器启动后执行以下命令,如果输出sqlsrv和pdo_sqlsrv则说明扩展安装成功:
docker exec app-cp-v3 php -m | grep sqlsrv
可选优化

你可以在Dockerfile中扩展安装步骤后添加验证命令,构建时就能提前发现扩展加载问题:

RUN docker-php-ext-enable sqlsrv pdo_sqlsrv && php -m | grep sqlsrv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:09:02