为PHP docker映像安装/配置SQL Server PDO驱动程序

Mol*_*pad 3 php sql-server pdo docker

我有一个简单的docker文件,如下所示:

FROM php:7.2-apache
COPY src/ /var/www/html/
Run Code Online (Sandbox Code Playgroud)

通常,为了安装用于Mongo或MySQL连接的驱动程序,我可以通过将以下内容添加到dockerfile中来实现:

docker-php-ext-install mongo
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想将php应用程序连接到SQL Server数据库,并且我了解为php 7.x做到这一点的最佳方法是使用PDO驱动程序,但是我不熟悉如何在dockerfile中配置它。

我试过进行pecl安装,例如添加:

RUN pecl install sqlsrv pdo_sqlsrv
Run Code Online (Sandbox Code Playgroud)

但是,这失败了,并且出现了一些错误,这些错误似乎并没有向我指出正确的方向。

我只是在寻找一种简单的方法来在dockerfile或使用docker run中完成此操作。

有关更多信息,这是我遇到的错误:

/tmp/pear/temp/sqlsrv/shared/xplat.h:30:17: fatal error: sql.h: No such file or directory
 #include <sql.h>
                 ^
compilation terminated.
Makefile:194: recipe for target 'conn.lo' failed
make: *** [conn.lo] Error 1
ERROR: `make' failed
The command '/bin/sh -c pecl install sqlsrv pdo_sqlsrv     && docker-php-ext-enable pdo_sqlsrv' returned a non-zero code: 1
Run Code Online (Sandbox Code Playgroud)

谢谢大家

Sah*_*988 24

我为此目的创建了一个 docker 文件:

FROM php:7.3-apache
ENV ACCEPT_EULA=Y
RUN apt-get update && apt-get install -y gnupg2
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 
RUN curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list 
RUN apt-get update 
RUN ACCEPT_EULA=Y apt-get -y --no-install-recommends install msodbcsql17 unixodbc-dev 
RUN pecl install sqlsrv
RUN pecl install pdo_sqlsrv
RUN docker-php-ext-enable sqlsrv pdo_sqlsrv

COPY . /var/www/html/
Run Code Online (Sandbox Code Playgroud)

享受!


小智 5

你得到答案了吗?我按照以下步骤进行操作。(unixodbc-dev软件包应该使您摆脱了pecl的安装。)

在Docker文件中:

RUN apt-get -y install unixodbc-dev
RUN pecl install sqlsrv pdo_sqlsrv
Run Code Online (Sandbox Code Playgroud)

然后,您必须对php.ini添加一些更改以启用sqlserver。

获取php.ini的本地副本并添加以下行:

extension=pdo_sqlsrv.so
extension=sqlsrv.so
Run Code Online (Sandbox Code Playgroud)

然后将本地php.ini复制到docker映像中(我的文件位于本地“ config”文件夹中)。

在Docker文件中:

COPY config/php.ini /usr/local/etc/php/
Run Code Online (Sandbox Code Playgroud)

  • 我完全按照您的说明进行操作,但出现以下错误:`连接到 SQL Server 时出错:SQLSTATE[IMSSP]:此扩展需要 Microsoft ODBC Driver for SQL Server 才能与 SQL Server 进行通信。访问以下 URL 以下载适用于 x64 的 SQL Server 的 ODBC 驱动程序:https://go.microsoft.com/fwlink/?LinkId=163712`。我是否需要在某处下载并集成文件“pdo_sqlsrv.so”和“sqlsrv.so”? (2认同)