Docker: unixodbc.h keine solche Datei oder Verzeichnis. Fehler „pecl install sqlsrv“ bei bereits installiertem unixodbc-dev
Lesezeit: 4 Minuten
Liebe
Das hat bis vor ein paar Tagen funktioniert. Wir erstellen einen Docker-Container mit dem folgenden Code, aber dies ist der Fehler, der auftritt, wenn versucht wird, „pecl install sqlsrv“ auszuführen. Es wird versucht, von PHP in diesem Container aus eine Verbindung zum mssql-Server herzustellen. Hat jemand da draußen, der klüger ist als ich, eine Idee?
Docker-Datei:
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
Fehler:
#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
Ich habe jede Version von PHP von 7.0 bis 8.1 mit oder ohne fpm ausprobiert. Ich habe auch mehrere Versionen von msodbcsql und unixodbc/unixodbc-dev sowie mehrere Versionen von sqlsrv und pdo_sqlsrv ausprobiert.
Sie sagen, dass versucht wird, eine Verbindung zum MySQL-Server herzustellen, sqlsrv ist für MS SQL Server
HI Ich hatte das gleiche Problem, ich konnte es buchstäblich vor vier Tagen bauen, dann gab es den Fehler, ich habe dann mein Pyodbc von Version 4.0.32 auf die neueste Version 4.0.35 aktualisiert, dann hat es funktioniert
Dies hat auch für mich auf einem Python 3.8 Slim-Buster-Image funktioniert.
– Wim
15. Februar um 13:10 Uhr
Ich habe seit einigen Tagen das gleiche Problem. Basierend auf den Vorschlägen anderer hier habe ich es geschafft, die Box zum Bauen zu bringen, indem ich den Debian-Kern von Bullseye auf Buster (11 -> 10) heruntergestuft und die Debian-Version in der URL der Paketliste auf 9 geändert habe, wie in anderen Antworten angegeben.
Ich hatte versucht, einfach einen älteren Treiber (5.9.0) anzugeben, während ich noch vergeblich mit Bullseye lief.
Es scheint immer noch Treiber 5.10.1 erfolgreich unter Buster mit Stretch-Quellenliste zu verwenden. Ich verwende PHP 8.2 FWIW.
Angesichts des plötzlichen Auftretens dieses Problems gehe ich davon aus, dass eine Lösung in Arbeit sein wird. Wenn ich etwas Neues erfahre, werde ich diese Antwort ändern und hoffentlich in den nächsten Tagen zum Bullseye zurückkehren können. Im Moment scheint dies zu genügen, um meine Pipeline zu reparieren.
Wenn Sie die verwenden Offizielles PHP-Docker-Image Bei Apache sind die Änderungen, die Sie vornehmen müssen, um auf Buster herunterzustufen und die richtige Paketliste zu erhalten, wie in anderen Antworten empfohlen, wie folgt:
Oben wechseln FROM php:[version]-apache Zu FROM php:[version]-apache-buster (FROM php:8.1-apache-buster)
Ändern RUN curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list Zu RUN curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list
Bjverde
Dieses Problem tritt bei Debian 10 und 11 mit Drive 5.10.0 oder 5.10.1 auf
Mit Treiber 5.9.0 und Debian 10, PHP 7.4, aber Repo Microsoft Debian 9. Es funktioniert !!
In Debian 10 mit PHP 8.1 das Repository von Debian 10 auf Debian 9 ändern. Es wird das Docker-Skript erstellen, ich habe nicht getestet, ob es eine Verbindung zur Datenbank herstellt, ich glaube schon.
Sie sagen, dass versucht wird, eine Verbindung zum MySQL-Server herzustellen, sqlsrv ist für MS SQL Server
– Manuel Barallobre Seoane
12. Februar um 11:01 Uhr
Das zugrunde liegende Problem ist ein Fehler im unixodbc-dev-Paket in den Microsoft-Repositories. Tracking hier: github.com/microsoft/linux-package-repositories/issues/36
– wieder kaputt
13. Februar um 7:00 Uhr