【问题标题】:Unable to connect to database from Docker无法从 Docker 连接到数据库
【发布时间】:2018-08-14 12:09:50
【问题描述】:

我无法找出正确的方式来安排从 Docker 容器连接到外部数据库所需的配置文件。整个事情都在 Windows 上运行,Docker 是 Debian,我使用 FreeTDS 按照this tutorial 建立连接。我也一直在关注this SO question 的建议。

使用非常有用的 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]未找到数据源名称,且未指定默认驱动程序 (0) (SQLDriverConnect)

但是,我可以使用tsql -H server_ip -p 1433 -U usr -P pw 通过命令行连接到数据库。 isql -v data_source username pwd 也可以。 osql 给出以下错误:

path/libtdsodbc.so 不是可执行文件

osql:错误:找不到数据源的驱动程序

我无法找出问题所在.. 无济于事 我对 Linux 也很缺乏经验。非常感谢任何帮助!

【问题讨论】:

  • 你的数据库也被 dockerized 了吗?当你说你能够连接到数据库时,它是从 Docker 容器中进行的吗?
  • @Mornor 我看到我的解释很模棱两可,现在修正了。对不起。
  • 你暴露了Docker镜像的:1433端口了吗?因此,在 Dockerfile 中:EXPOSE 1433 和 Docker 命令:docker run -p 1433:1433 [...]
  • 能否提供一些关于如何改进这篇文章的见解?还是不是主题?
  • @Mornor 暴露,没有帮助..

标签: python linux docker odbc pyodbc


【解决方案1】:

我在this answer 的帮助下解决了链接问题。这不是一个直接的修复,因为配置仍然无法正常工作,但它是一个旁路并且足够好。

诀窍是使用关键字参数而不是连接字符串调用pyodbc.connect。从链接复制:

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 文件进行配置,这样至少省去了一些构建容器的麻烦。

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 2019-07-04
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2019-11-11
    • 2018-07-28
    • 2021-11-10
    相关资源
    最近更新 更多