如何在PHP Docker容器中安装启用PDO-ODBC驱动以连接MS SQL Server?
解决PHP Apache容器中PDO-ODBC连接MS SQL Server的问题
我来帮你搞定这个PDO-ODBC驱动的问题!你的现有Dockerfile有几个小问题需要调整,而且要顺利连接MS SQL Server,还得补上微软官方的ODBC驱动——这是很多人容易漏掉的关键环节。
下面是修正并完善后的完整Dockerfile:
FROM php:apache # 安装依赖并配置PDO-ODBC及MS SQL驱动 RUN apt-get update && \ apt-get install -y --no-install-recommends \ tdsodbc \ unixodbc \ unixodbc-dev \ curl \ gnupg2 && \ # 添加微软APT源并安装MS SQL ODBC驱动 curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \ curl https://packages.microsoft.com/config/debian/$(lsb_release -rs)/prod.list > /etc/apt/sources.list.d/mssql-release.list && \ apt-get update && \ ACCEPT_EULA=Y apt-get install -y msodbcsql18 && \ # 编译安装PHP的PDO-ODBC扩展 docker-php-ext-configure pdo_odbc --with-pdo-odbc=unixODBC,/usr && \ docker-php-ext-install pdo_odbc && \ # 启用Apache重写模块 a2enmod rewrite && \ # 清理APT缓存减少镜像体积 apt-get clean && \ rm -rf /var/lib/apt/lists/* # 官方php:apache镜像默认会自动启动Apache服务,无需手动执行service指令
关键步骤说明:
- 修正APT命令逻辑:删掉了无用的空
apt-get install命令,先执行apt-get update刷新源再安装依赖,避免包找不到的问题 - 添加微软ODBC驱动:MS SQL Server依赖官方ODBC驱动才能建立稳定连接,这里安装的是最新稳定版
msodbcsql18,如果需要兼容旧版SQL Server,可以换成msodbcsql17 - 正确安装PDO-ODBC扩展:用
docker-php-ext-install替代单独的enable指令,因为install会自动编译并启用扩展,更符合官方镜像的使用规范 - 优化镜像体积:最后清理APT缓存和临时文件,避免镜像过于臃肿
- Apache启动逻辑:官方
php:apache镜像的ENTRYPOINT已经配置了自动启动Apache,不需要手动写service apache2 start这类指令
测试连接的示例代码
如果要验证驱动是否正常工作,可以用这段简单的PHP代码测试:
<?php try { // 替换成你的SQL Server配置 $dsn = "odbc:Driver={ODBC Driver 18 for SQL Server};Server=tcp:your-sql-host,1433;Database=your-db-name;Uid=your-username;Pwd=your-password;Encrypt=yes;TrustServerCertificate=yes;"; $pdo = new PDO($dsn); echo "MS SQL Server连接成功!"; } catch (PDOException $e) { die("连接失败: " . $e->getMessage()); } ?>
注意:
TrustServerCertificate=yes仅适合测试环境,生产环境建议配置合法的SSL证书并关闭该选项。
内容的提问来源于stack exchange,提问作者Amar
相关产品推荐
相关产品推荐

