Solución:
Necesita correr:
sudo apt-get install gcc
Necesito agregar un archivo odbcinst.ini que contenga:
[FreeTDS]Description=FreeTDS Driver Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
Necesito agregar lo siguiente al archivo Docker.
ADD odbcinst.ini /etc/odbcinst.ini
RUN apt-get update
RUN apt-get install -y tdsodbc unixodbc-dev
RUN apt install unixodbc-bin -y
RUN apt-get clean -y
Necesito cambiar la conexión en .py a
connection = pyodbc.connect('Driver={FreeTDS};'
'Server=xxxxx;'
'Database=DCMM;'
'UID=xxxxx;'
'PWD=xxxxx')
Ahora el contenedor se compila y obtiene datos del servidor SQL
Al revisar esto recientemente, descubrí que era necesario incluir adicionalmente la siguiente línea (tenga en cuenta que no se compiló sin este paso):
RUN apt-get install --reinstall build-essential -y
El Dockerfile completo tiene el siguiente aspecto:
# parent image
FROM python:3.7-slim
# install FreeTDS and dependencies
RUN apt-get update
&& apt-get install unixodbc -y
&& apt-get install unixodbc-dev -y
&& apt-get install freetds-dev -y
&& apt-get install freetds-bin -y
&& apt-get install tdsodbc -y
&& apt-get install --reinstall build-essential -y
# populate "ocbcinst.ini"
RUN echo "[FreeTDS]n
Description = FreeTDS unixODBC Drivern
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.son
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so" >> /etc/odbcinst.ini
# install pyodbc (and, optionally, sqlalchemy)
RUN pip install --trusted-host pypi.python.org pyodbc==4.0.26 sqlalchemy==1.3.5
# run app.py upon container launch
CMD ["python", "app.py"]
Aquí hay una forma de establecer la conexión dentro de app.py, a través de sqlalchemy (y asumiendo el puerto 1433):
import sqlalchemy as sa
args = (username, password, server, database)
connstr = "mssql+pyodbc://{}:{}@{}/{}?driver=FreeTDS&port=1433&odbc_options="TDS_Version=8.0""
engine = sa.create_engine(connstr.format(*args))
Según la respuesta de Kåre Rasmussen, aquí hay un archivo docker completo para su uso posterior.
¡Asegúrese de editar las dos últimas líneas de acuerdo con su arquitectura! Deben reflejar las rutas reales a libtdsodbc.so y libtdsS.so.
Si no está seguro de las rutas a libtdsodbc.so y libtdsS.so, intente dpkg --search libtdsodbc.so
y dpkg --search libtdsS.so
.
FROM python:3
#Install FreeTDS and dependencies for PyODBC
RUN apt-get update && apt-get install -y tdsodbc unixodbc-dev
&& apt install unixodbc-bin -y
&& apt-get clean -y
RUN echo "[FreeTDS]n
Description = FreeTDS unixODBC Drivern
Driver = /usr/lib/arm-linux-gnueabi/odbc/libtdsodbc.son
Setup = /usr/lib/arm-linux-gnueabi/odbc/libtdsS.so" >> /etc/odbcinst.ini
Luego, instale PyODBC, COPIE su aplicación y ejecútela.