Python 无法使用FreeTDS连接到Docker SQL SERVER容器
错误:Python 无法使用FreeTDS连接到Docker SQL SERVER容器,python,linux,docker,pyodbc,freetds,Python,Linux,Docker,Pyodbc,Freetds,错误: FROM ubuntu:latest # install FreeTDS and dependencies RUN apt-get update \ && apt-get install -y python-pip python-dev \ && apt-get install unixodbc -y \ && apt-get install unixodbc-dev -y \ && apt
FROM ubuntu:latest
# install FreeTDS and dependencies
RUN apt-get update \
&& apt-get install -y python-pip python-dev \
&& 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 Driver\n\
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so\n\
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so" >> /etc/odbcinst.ini
# install pyodbc
RUN pip install --trusted-host pypi.python.org pyodbc==4.0.26
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
# run app.py upon container launch
CMD ["python", "app.py"]
connection=pyodbc.connect('Driver={FreeTDS};'
pyodbc.OperationalError:('08S01',u'[08S01][unixODBC][FreeTDS][SQL Server]无法连接:自适应服务器不可用或不存在(20009)(SQLDriverConnect)'
memorysnapshot_应用程序_1已退出,代码为1
Dockerfile:
FROM ubuntu:latest
# install FreeTDS and dependencies
RUN apt-get update \
&& apt-get install -y python-pip python-dev \
&& 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 Driver\n\
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so\n\
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so" >> /etc/odbcinst.ini
# install pyodbc
RUN pip install --trusted-host pypi.python.org pyodbc==4.0.26
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
# run app.py upon container launch
CMD ["python", "app.py"]
App.py
import pyodbc
app = Flask(__name__)
connection = pyodbc.connect('Driver={FreeTDS};'
'Server=localhost,1433;'
'Database=OTC;'
'UID=sa;'
'PWD=Password123!')
def test_localhost(cursor):
cursor = connection.cursor()
cursor.execute("SELECT * FROM otc.dbo.memorysnapshot") # WHATEVER QUERY YOU WANT TO EXECUTE GOES IN HERE
for row in cursor:
print render_template('index.html', cursor=data)
connection, cursor = pyodbc_localhost()
test_localhost(cursor)
cursor.close()
connection.close()
if __name__=="__main__":
app.run(debug=True, host='0.0.0.0')
确保您可以使用
telnet[mssql容器fqdn或ip]从运行Flask的位置进行连接1433
。如果这样做有效,请尝试tsql
以确保您可以手动连接。如果telnet
失败,请检查容器化SQL Server上的防火墙。如果tsql
失败,请检查您的凭据。如果两者都有效,请告诉我,我们将深入探讨。我有相同的问题,有解决方案吗?