从Docker内部访问外部SQL服务器

时间:2018-02-19 02:03:00

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

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

这是我的Base 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

1 个答案:

答案 0 :(得分:2)

我通过编辑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 来解决这个问题:

docker exec -ti <hash> bash

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

如果对路径运行docker容器有疑问,请进入它(click)并搜索正确的路径。

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