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

zpf6vheq  于 2023-02-15  发布在  PHP
关注(0)|答案(7)|浏览(254)

这一直在工作,直到几天前。我们正在建立一个docker容器与以下代码,但这是错误发生时,试图"pecl安装sqlsrv"。试图连接到mssql服务器从PHP在这个容器中。有人比我聪明有什么想法?
Docker文件:

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

错误:

#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

我试过了PHP从7.0到8.1的每一个版本,不管有没有fpm,我也试过了msodbcsql和unixodbc/unixodbc-dev的几个版本,以及sqlsrv和pdo_sqlsrv的几个版本。

mi7gmzs6

mi7gmzs61#

我在安装以下软件包版本时修复了该问题:

apt-get install unixodbc-dev=2.3.7 unixodbc=2.3.7 odbcinst1debian2=2.3.7 odbcinst=2.3.7

使用此命令直到解决错误。
来源:https://github.com/microsoft/linux-package-repositories/issues/36

ckx4rj1h

ckx4rj1h2#

嗨我有同样的问题我可以建立它字面上四天前,然后它给了错误,然后我升级我的pyodbc从版本4. 0. 32到最新版本4. 0. 35,然后它的工作

v2g6jxz6

v2g6jxz63#

过去几天我也遇到过同样的问题,根据其他人的建议,我已经设法把debian core从bullseye降级到buster(11 -〉10),并把软件包列表url中的debian ver改为9,就像其他回复中提到的那样。
我曾试图简单地指定一个旧的驱动程序(5. 9. 0),同时仍然运行bullseye,但无济于事。
它看起来仍然在buster w/ stretch源列表下成功地使用驱动程序5.10.1。我正在运行php 8.2 FWIW。
考虑到这个问题的突然出现,我预计修复工作将在工程中。如果我学到了任何新的东西,我会修改这个回应,并希望我可以回到靶心在未来几天。现在,这似乎足以修复我的管道。

y53ybaqx

y53ybaqx4#

如果您使用的是PHP Official Docker image和Apache,您需要做的更改是降级到Buster并获得其他答案中推荐的正确软件包列表:
1.在顶部,将FROM php:[version]-apache更改为FROM php:[version]-apache-busterFROM php:8.1-apache-buster
1.将RUN curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list更改为RUN curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list

lawou6xi

lawou6xi5#

这个问题发生在驱动器为5.10.0或5.10.1的Debian 10和11上
与驱动程序5.9.0和Debian 10,PHP 7.4,但回购微软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

xienkqul

xienkqul6#

今天在php:7.3-fpm-buster中发生的问题,将Debian列表从10改为9解决了这个问题

/etc/apt/源文件列表d/mssql-release.list

/etc/apt/源文件列表d/mssql-release.list

guz6ccqo

guz6ccqo7#

这对我很有效ubuntu22.04
运行接受_EULA=是apt-get安装-y
msodbcsql17
mssql工具
单因素方差=2.3.7
单核细胞数=2.3.7
数据库指令1 db2 =2.3.7
平均值=2.3.7
运行echo '导出路径="$路径:/opt/mssql-tools 17/bin”'〉〉~/.bashrc运行执行bash
运行pecl安装sqlsrv-5.8.0运行打印“;优先级= 20\n扩展名= sqlsrv.so\n”〉/etc/php/7.3/可用模块/sqlsrv. ini

相关问题