sql-server - 从 Docker 内部访问外部 SQL 服务器

标签 sql-server python-3.x docker pyodbc

我很难让我的 docker 容器访问 MS SQL 服务器。我尝试过关注 this在这里进行指导,但无济于事。

这是我的基本 Dockerfile:

FROM python:3
ADD ./odbcinst.ini /etc/odbcinst.ini
RUN apt-get update && apt-get install gcc
RUN apt-get install -y tdsodbc unixodbc-dev
RUN apt-get install unixodbc-bin -y
RUN apt-get clean -y
RUN apt-get update && apt-get install -y gcc unixodbc-dev mssql-python-pyodbc

RUN pip install pyodbc
RUN pip install plaster_pastedeploy pyramid pyramid_jinja2 pyramid_debugtoolbar waitress yagmail pyodbc

这是扩展它的另一个 docker 文件:

FROM pyodbc
COPY . .
RUN pip install -e companalysis/
CMD [ "pserve", "companalysis/development.ini" ]
EXPOSE 8081

这是我的 sql 连接字符串:

strconn = 'DRIVER=
{FreeTDS};SERVER=192.168.0.6;
DATABASE=xxxx;UID=xxxx;PWD=xxx'

无论我做什么,我都会收到此错误:

Error: ('01000', u"[01000] [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found (0) (SQLDriverConnect)")

我希望在这方面得到一些帮助。 编辑:我已经将其安装在我的 dockerfile 中:

我可以在我的 dockerfile 中正确安装驱动程序:

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
RUN export PYMSSQL_BUILD_WITH_BUNDLED_FREETDS=1
RUN apt-get update && apt-get install -y unixodbc unixodbc-dev freetds-dev freetds-bin tdsodbc

最佳答案

我通过编辑 /etc/odbcinst.ini 解决了这个问题像这样:

RUN echo "[FreeTDS]\n\
Description = FreeTDS unixODBC Driver\n\
Driver = /usr/lib/arm-linux-gnueabi/odbc/libtdsodbc.so\n\
Setup = /usr/lib/arm-linux-gnueabi/odbc/libtdsS.so" >> /etc/odbcinst.ini

正如链接问题中已经指出的那样,libtdsodbc.so 和 libtdsS.so 的路径可能会有所不同,具体取决于您的架构。

如果对运行 docker 容器的路径有疑问,请进入它 ( docker exec -ti <hash> bash ) 并搜索正确的路径。


根据您的操作系统和体系结构,您还可以使用 Microsoft ODBC 驱动程序而不是 FreeTDS 驱动程序。有关详细说明,请参阅docs .

关于sql-server - 从 Docker 内部访问外部 SQL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48858648/

相关文章:

Python:为什么在使用 write() 时输出中有多余的空行?

linux - 更改默认 python3 或在 Ubuntu 上卸载一个安装

python - 如何在Python中对月份列进行排序后找到平均值

docker - 将docker中的网络选项转换为docker-compose?

java - JDBC和mySQL将相关数据库表转换为对象

sql-server - 如何在一个查询中更新 2 个表

c# - 如何安排数据库任务?

docker - 如何设置 Docker LXC 容器的 MAC 地址?

docker - pod 容器无法解析运行它的主机

sql-server - 用于重建和重新索引碎片索引的脚本?