无法从 Docker 连接到数据库
Unable to connect to database from Docker
我无法弄清楚如何安排从 Docker 容器连接到外部数据库所需的配置文件的正确方法。整个事情是 Windows 上的 运行,Docker 是 Debian,我按照 this tutorial to make a connection. I've also been following suggestions in this SO question.
使用 FreeTDS
借助非常有用的 Flask 调试器,我可以知道我正在使用以下连接字符串连接到服务器:
'DSN=server_name; DATABASE=db_name; UID=usr; PWD=pw'
这些是我的配置文件的内容:
# odbcinst.ini in /etc/ and /
[FreeTDS]
Description = FreeTDS driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
# odbc.ini in /etc/ and /root/.odbc.ini
[data_source]
Driver = FreeTDS
Servername = server_name
Port = 1433
Database = db_name
# freetds.conf in /etc/freetds/
[global]
tds version = 7.4
[server_name]
host = server_ip
port = 1433
[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)
但是,我可以使用 tsql -H server_ip -p 1433 -U usr -P pw
通过命令行连接到数据库。 isql -v data_source username pwd
也有效。 osql
给出以下错误:
path/libtdsodbc.so is not an executable file
osql: error: no driver found for data_source
我无法弄清楚问题.. 没有帮助我对 Linux 也很缺乏经验。非常感谢任何帮助!
我在 this answer 的帮助下设法解决了 linked 问题。这不是一个直接的修复,因为配置仍然无法正常工作,但它是一个旁路并且足够好。
诀窍是使用关键字参数而不是连接字符串调用 pyodbc.connect
。从 link 复制:
import pyodbc
conn = pyodbc.connect(
driver = 'FreeTDS',
TDS_Version = '7.4',
server = '<hostname or ip address>',
port = 1433,
database = '<database>',
uid = '<uid>',
pwd = '<pwd>'
)
修复特别奇怪,因为我认为 PyODBC 的官方 Wiki 根本没有提到关键字参数版本。
此外,现在配置只需要 odbcinst.ini
文件,这样至少可以省去容器构建的一些麻烦。
我无法弄清楚如何安排从 Docker 容器连接到外部数据库所需的配置文件的正确方法。整个事情是 Windows 上的 运行,Docker 是 Debian,我按照 this tutorial to make a connection. I've also been following suggestions in this SO question.
使用 FreeTDS借助非常有用的 Flask 调试器,我可以知道我正在使用以下连接字符串连接到服务器:
'DSN=server_name; DATABASE=db_name; UID=usr; PWD=pw'
这些是我的配置文件的内容:
# odbcinst.ini in /etc/ and /
[FreeTDS]
Description = FreeTDS driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
# odbc.ini in /etc/ and /root/.odbc.ini
[data_source]
Driver = FreeTDS
Servername = server_name
Port = 1433
Database = db_name
# freetds.conf in /etc/freetds/
[global]
tds version = 7.4
[server_name]
host = server_ip
port = 1433
[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)
但是,我可以使用 tsql -H server_ip -p 1433 -U usr -P pw
通过命令行连接到数据库。 isql -v data_source username pwd
也有效。 osql
给出以下错误:
path/libtdsodbc.so is not an executable file
osql: error: no driver found for data_source
我无法弄清楚问题.. 没有帮助我对 Linux 也很缺乏经验。非常感谢任何帮助!
我在 this answer 的帮助下设法解决了 linked 问题。这不是一个直接的修复,因为配置仍然无法正常工作,但它是一个旁路并且足够好。
诀窍是使用关键字参数而不是连接字符串调用 pyodbc.connect
。从 link 复制:
import pyodbc
conn = pyodbc.connect(
driver = 'FreeTDS',
TDS_Version = '7.4',
server = '<hostname or ip address>',
port = 1433,
database = '<database>',
uid = '<uid>',
pwd = '<pwd>'
)
修复特别奇怪,因为我认为 PyODBC 的官方 Wiki 根本没有提到关键字参数版本。
此外,现在配置只需要 odbcinst.ini
文件,这样至少可以省去容器构建的一些麻烦。