Docker:unixodbc.h 没有这样的文件或目录。已安装 unixodbc-dev 时出现“pecl install sqlsrv”错误

dlo*_*ove 27 php sql-server docker sqlsrv fpm

直到几天前,这一直在进行。我们正在使用以下代码构建一个 docker 容器,但这是尝试“pecl install sqlsrv”时发生的错误。尝试从该容器中的 PHP 连接到 mssql 服务器。有比我聪明的人有什么想法吗?

泊坞窗文件:

FROM  --platform=linux/amd64 php:8.0-fpm

RUN apt-get update && apt-get -y install nano apt-utils libxml2-dev gnupg \
    && apt-get install -y zlib1g-dev \
    && apt-get install -y libzip-dev \
    && docker-php-ext-install zip 

RUN apt-get -y install libicu-dev gcc g++ make autoconf libc-dev pkg-config libssl-dev apt-transport-https libgss3 

# Install MS ODBC Driver for SQL Server
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
    && curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \
    && apt-get update

# Automatically accept the terms from Microsoft
RUN apt-get install -y unixodbc unixodbc-dev odbcinst locales
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17
RUN apt-get -y install gcc g++ make autoconf libc-dev pkg-config
RUN apt-get update 
RUN pecl install sqlsrv
RUN pecl install pdo_sqlsrv
RUN docker-php-ext-enable sqlsrv pdo_sqlsrv
Run Code Online (Sandbox Code Playgroud)

错误:

#0 41.16 In file included from /usr/include/sql.h:19,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/xplat.h:30,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/typedefs_for_linux.h:23,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/xplat_winnls.h:24,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/FormattedPrint.h:24,
#0 41.16                  from /tmp/pear/temp/sqlsrv/shared/core_sqlsrv.h:41,
#0 41.16                  from /tmp/pear/temp/sqlsrv/php_sqlsrv_int.h:25,
#0 41.16                  from /tmp/pear/temp/sqlsrv/conn.cpp:24:
#0 41.16 /usr/include/sqltypes.h:56:10: fatal error: unixodbc.h: No such file or directory
#0 41.16    56 | #include "unixodbc.h"
#0 41.16       |          ^~~~~~~~~~~~
#0 41.16 compilation terminated.
#0 41.18 make: *** [Makefile:209: conn.lo] Error 1
#0 41.19 ERROR: `make' failed
Run Code Online (Sandbox Code Playgroud)

我尝试过从 7.0 到 8.1 的所有 PHP 版本,无论是否使用 fpm。我还尝试了多个版本的 msodbcsql 和 unixodbc/unixodbc-dev 以及多个版本的 sqlsrv 和 pdo_sqlsrv。

小智 15

我通过安装以下软件包版本解决了该问题:

apt-get install unixodbc-dev=2.3.7 unixodbc=2.3.7 odbcinst1debian2=2.3.7 odbcinst=2.3.7
Run Code Online (Sandbox Code Playgroud)

使用它直到错误得到解决。

来源: https: //github.com/microsoft/linux-package-repositories/issues/36


小智 6

嗨,我遇到了同样的问题,四天前我可以构建它,然后它给出了错误,然后我将 pyodbc 从版本 4.0.32 升级到最新版本 4.0.35,然后它就工作了


Bjv*_*rde 1

使用 Drive 5.10.0 或 5.10.1 的 Debian 10 和 11 会出现此问题

使用驱动程序 5.9.0 和 Debian 10、PHP 7.4 但存储 Microsoft debian 9。它可以工作!

在 Debian 10 中,php 8.1 将存储库从 Debian 10 更改为 Debian 9。它将创建 Docker 脚本,我还没有测试它是否会连接到数据库,我相信是的。

将https://packages.microsoft.com/config/debian/10/prod.list更改 为 https://packages.microsoft.com/config/debian/9/prod.list