Docker: unixodbc.h no existe tal archivo o directorio. Error “pecl install sqlsrv” con unixodbc-dev ya instalado

4 minutos de lectura

avatar de usuario de dlove
me encantaría

Esto había estado funcionando hasta hace unos días. Estamos creando un contenedor docker con el siguiente código, pero este es el error que ocurre al intentar “pecl install sqlsrv”. Intentando conectarse al servidor mssql desde PHP en este contenedor. ¿Alguien más inteligente que yo tiene alguna idea?

Archivo acoplable:

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

Error:

#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

He probado todas las versiones de PHP desde la 7.0 hasta la 8.1 con o sin fpm. También probé varias versiones de msodbcsql y unixodbc/unixodbc-dev y varias versiones de sqlsrv y pdo_sqlsrv.

  • Usted dice que intenta conectarse al servidor mysql, sqlsrv es para MS SQL Server

    –Manuel Barallobre Seoane

    12 de febrero a las 11:01

  • El problema subyacente es un error en el paquete unixodbc-dev en los repositorios de Microsoft. Seguimiento aquí: github.com/microsoft/linux-package-repositories/issues/36

    – vuelto a romper

    13 de febrero a las 7:00

Avatar de usuario de Abraham Araujo Moreno
Abraham Araújo Moreno

Solucioné el problema instalando las siguientes versiones del paquete:

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

Use esto hasta que el error se resuelva.

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

Hola, tuve el mismo problema, pude compilarlo literalmente hace cuatro días y luego dio el error, luego actualicé mi pyodbc de la versión 4.0.32 a la última versión 4.0.35, luego funcionó

  • Esto también funcionó para mí en una imagen delgada de Python 3.8.

    – Wim

    15 de febrero a las 13:10

He tenido el mismo problema los últimos días. Con base en las sugerencias de otros aquí, logré construir el cuadro degradando el núcleo de Debian de Bullseye a Buster (11 -> 10) y cambiando la versión de Debian a 9 en la URL de la lista de paquetes como se indica en otras respuestas.

Intenté simplemente especificar un controlador anterior (5.9.0) mientras seguía ejecutando Bullseye sin éxito.

Parece que todavía está usando el controlador 5.10.1 con éxito en Buster con la lista de fuentes de extensión. Estoy ejecutando php 8.2 FWIW.

Dada la aparición repentina de este problema, espero que se esté trabajando en una solución. Si aprendo algo nuevo, modificaré esta respuesta y, con suerte, puedo volver a la diana en los próximos días. Por ahora, esto parece ser suficiente para arreglar mi canalización.

Si está utilizando el Imagen Docker oficial de PHP con Apache, los cambios que debe realizar para degradar a Buster y obtener la lista de paquetes correcta como se recomienda en otras respuestas son:

  1. En la parte superior, cambia FROM php:[version]-apache a FROM php:[version]-apache-buster (FROM php:8.1-apache-buster)
  2. Cambiar RUN curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list a RUN curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list

Avatar de usuario de Bjverde
Bjverde

Este problema ocurre con Debian 10 y 11 con Drive 5.10.0 o 5.10.1

Con controlador 5.9.0 y Debian 10, PHP 7.4 pero repositorio microsoft debian 9. ¡Funciona!

En Debian 10, con php 8.1 cambiando el repositorio de Debian 10 a Debian 9. Creará el script Docker, no he probado si se conectará a la base de datos, creo que sí.

Cambiar
https://packages.microsoft.com/config/debian/10/prod.list
a
https://packages.microsoft.com/config/debian/9/prod.list

Avatar de usuario de Eugene Kaurov
Eugenio Kaurov

esto funcionó para mí
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

Avatar de usuario de Hamza AlZaatreh
Hamza Al-Zaatreh

simplemente sucede hoy con php: 7.3-fpm-buster, cambiar la lista de Debian de 10 a 9 lo resuelve

De

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

A

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

¿Ha sido útil esta solución?