我一直在尝试设置一个Docker容器/映像,它可以连接到SQL Server数据库,基于Luis的pyodbc repo,在这里找到:https://hub.docker.com/r/lbosqmsft/mssql-python-pyodbc/
我在Window的PC上运行Docker工具箱,并测试了在PC上本地运行Python代码并验证它可以建立连接:
Connecting to server
DRIVER={ODBC Driver 13 for SQL Server};SERVER=$SERVER_NAME;DATABASE=$DB_NAME;UID=$SERVICE_ID;PWD=$PASSWORD
Got connection
在(Ubuntu)容器中,我使用sqlcmd测试了连接,并且能够成功连接并运行查询而不会出现问题:
root:/app# sqlcmd -S $SERVER_NAME,$PORT -U $SERVICE_ID -P $PASSWORD
1> select SYSTEM_USER
2> GO
----------------------------------------------------------------------------------------------------------------------------
$SERVICE_ID
但由于某种原因,当我从容器中运行Python代码时,连接将无法建立并因超时错误而失败:
Connecting to server
DRIVER={ODBC Driver 13 for SQL Server};SERVER=$SERVER_NAME;DATABASE=$DB_NAME;UID=$SERVICE_ID;PWD=$PASSWORD
WARNING:root:Database connection error. ('HYT00', u'[HYT00] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
我已经验证两个连接字符串是相同的,我试图连接使用SQL服务ID(不是Windows身份验证)。我还验证了对于已建立的Windows连接,它确实使用了服务ID(通过运行select SYSTEM_USER查询)。
还有其他人遇到过类似行为吗?