Mssql-django - TCP Provider: Код ошибки 0x2746 (10054) (SQLDriverConnect)
Имею докеризованное приложение Django 4, работающее на хосте Docker (Debian10), подключающееся к сетевому SQL Server 2012 (работающему на Windows10) в среде разработки.
Не удается заставить тот же образ docker подключиться к SQL Server 2014 (работающему на виртуальной машине Server2012) в среде staging. В журналах событий SQL Server видно, что подключение к БД успешно:
Login succeeded for user '<USERNAME>'. Connection made using SQL Server authentication. [CLIENT: <DB_SERVER_IP>]
Однако, Django выдает ошибку со следующим Stack Trace:
alluradjango-web-1 | self.connect()
alluradjango-web-1 | File "/home/djangouser/.local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
alluradjango-web-1 | return func(*args, **kwargs)
alluradjango-web-1 | File "/home/djangouser/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect
alluradjango-web-1 | self.connection = self.get_new_connection(conn_params)
alluradjango-web-1 | File "/home/djangouser/.local/lib/python3.9/site-packages/mssql/base.py", line 329, in get_new_connection
alluradjango-web-1 | conn = Database.connect(connstr,
alluradjango-web-1 | django.db.utils.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746 (10054) (SQLDriverConnect)')
requirements.txt:
asgiref==3.5.0
backports.zoneinfo==0.2.1
Django==4.0.3
django-allow-cidr==0.4.0
django-environ
djangorestframework==3.13.1
mssql-django==1.1.2
netaddr==0.8.0
pyodbc==4.0.32
pytz==2021.3
sqlparse==0.4.2
black==22.1.0
pylint==2.12.2
pylint-django==2.5.2
python-decouple==3.6
pre-commit==2.17.0
djangouser@2062b37a0a3a:~$ odbcinst -j
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/djangouser/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
/etc/odbc.ini пуст
djangouser@2062b37a0a3a:~$ cat /etc/odbcinst.ini
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1
UsageCount=1
Брандмауэр на хостовой ОС SQL Server выключен. nmap показывает, что порт открыт. И, как указано выше, в логах ОС хоста SQL Server можно увидеть успех соединения.
Однако, вышеуказанная ошибка сохраняется. Любая помощь будет признательна, я застрял на 9 дней.
SOLVED: понижение версии OpenSSL
Добавление этого в мой Dockerfile позволило установить соединение (все еще не уверен, почему оно зашифровано):
#Downgrade OpenSSL RUN curl openssl.org/source/openssl-1.1.1l.tar.gz -O \ && tar -zxvf openssl-1.1.1l.tar.gz && cd openssl-1.1.1l \ && ./config \ && make \ && make install \ && ldconfig \ && cd ..