Docker: unixodbc.h keine solche Datei oder Verzeichnis. Fehler „pecl install sqlsrv“ bei bereits installiertem unixodbc-dev

Lesezeit: 4 Minuten

Benutzeravatar von dlove
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

    – 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

Benutzeravatar von Abraham Araujo Moreno
Abraham Araujo Moreno

Ich habe das Problem behoben, indem ich die folgenden Paketversionen installiert habe:

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

Verwenden Sie dies, bis der Fehler behoben ist.

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

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:

  1. Oben wechseln FROM php:[version]-apache Zu FROM php:[version]-apache-buster (FROM php:8.1-apache-buster)
  2. Ä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

Benutzeravatar von Bjverde
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.

Ändern
https://packages.microsoft.com/config/debian/10/prod.list
Zu
https://packages.microsoft.com/config/debian/9/prod.list

Benutzeravatar von Eugene Kaurov
Eugen Kaurow

Das hat bei mir funktioniert
Ubuntu 22.04

RUN ACCEPT_EULA=Y apt-get install -y \
    msodbcsql17 \
    mssql-tools \
    unixodbc-dev=2.3.7 \
    unixodbc=2.3.7 \
    odbcinst1debian2=2.3.7 \
    odbcinst=2.3.7

RUN echo 'export PATH="$PATH:/opt/mssql-tools17/bin"' >> ~/.bashrc
RUN exec bash

RUN pecl install sqlsrv-5.8.0
RUN printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.3/mods-available/sqlsrv.ini

Benutzeravatar von Hamza AlZaatreh
Hamza AlZaatreh

passiert gerade heute mit php:7.3-fpm-buster, Änderung der Debian-Liste von 10 auf 9 löst es

Aus

kräuseln https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list

Zu

kräuseln https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list

1444790cookie-checkDocker: unixodbc.h keine solche Datei oder Verzeichnis. Fehler „pecl install sqlsrv“ bei bereits installiertem unixodbc-dev

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy