Невозможно подключиться к Sql Server из Docker Django
я пытаюсь подключить мой Django к существующей унаследованной базе данных MS SQL.
Когда я пытаюсь выполнить sql на базе данных, все работает нормально:
sql = 'SELECT * FROM ' + db_name + '.INFORMATION_SCHEMA.TABLES'
connection_string = "driver=FreeTDS;server={};PORT={} database={};UID={};PWD={};TDS_Version=8.0;".format(db_host, db_port, db_name, db_user, db_password)
conn = pyodbc.connect(connection_string, autocommit=True)
for row in cursor.fetchall():
print(row)
И я вижу все таблицы, но когда я пытаюсь сгенерировать модель из базы данных, выполняя эту команду:
python manage.py inspectdb --database pirineos > pirineos_models.py
Я получаю ошибку:
django.db.utils.Error: ('08001', '[08001] [FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')
Это файлы моего проекта.
Dockerfile:
FROM python:3.8-slim-buster
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN apt-get update -y && apt-get install -y unixodbc unixodbc-dev tdsodbc freetds-common freetds-bin freetds-dev && apt-get clean && rm -rf /var/lib/apt/lists/*
RUN mkdir /djangonoguero
COPY ./project /djangonoguero/
COPY ./requirements.txt /djangonoguero/
ADD odbcinst.ini /etc/
WORKDIR /djangonoguero
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
requirements.txt:
pyodbc==3.0.10
django-mssql-backend==2.8.1
settings.py:
DATABASES = {
'pirineos': {
'ENGINE': 'sql_server.pyodbc',
'NAME': DB_PIRINEOS_NAME,
'USER': DB_PIRINEOS_USER,
'PASSWORD': DB_PIRINEOS_PASSWORD,
'HOST': DB_PIRINEOS_HOST,
'PORT': DB_PIRINEOS_PORT,
'OPTIONS': {
'driver': 'FreeTDS',
'unicode_results': True,
'driver_supports_utf8' : True,
'extra_params': 'tds_version=8.0;',
},
},
}
odbcinst.ini:
[FreeTDS]
Description=FreeTDS Driver for Linux & MSSQL on Win32
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
UsageCount=1
РЕШЕНО
Dockerfile:
FROM python:3.8-slim-buster
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV DEBIAN_FRONTEND noninteractive
ADD odbcinst.ini /etc/
RUN apt-get update -y && apt-get install -y curl gnupg
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update -y && apt-get install -y unixodbc unixodbc-dev tdsodbc freetds-common freetds-bin freetds-dev postgresql python-scipy python-numpy python-pandas
RUN apt-get update && ACCEPT_EULA=Y apt-get -y install mssql-tools msodbcsql17
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
RUN apt-get update
RUN mkdir /djangonoguero
COPY ./project /djangonoguero/
COPY ./requirements.txt /djangonoguero/
WORKDIR /djangonoguero
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
odbcinst.ini:
[FreeTDS]
Description=FreeTDS Driver
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
settings.py:
'pirineos': {
'ENGINE': 'sql_server.pyodbc',
'NAME': DB_PIRINEOS_NAME,
'USER': DB_PIRINEOS_USER,
'PASSWORD': DB_PIRINEOS_PASSWORD,
'HOST': DB_PIRINEOS_HOST,
'PORT': DB_PIRINEOS_PORT,
'OPTIONS': {
'driver': 'FreeTDS',
'unicode_results': True,
'host_is_server': True,
'driver_supports_utf8': True,
'extra_params': 'tds_version=7.4',
},
},