2017-02-14 16 views
4

Мне сказали задавать этот вопрос отдельно, но он связан с вопросом this здесь.Драйвер ODBC 13 для SQL Server не может открыть lib на pyobbc при подключении к образцу ubuntu docker

У меня есть точная проблема на изображении докера, которое я создал с помощью официального Ubuntu (16.04). Он работает от isql, но не через соединение pyodbc. Ниже приведен след ODBC:

[ODBC][60][1487069096.117665][__handles.c][460] 
       Exit:[SQL_SUCCESS] 
         Environment = 0x1458c20 
[ODBC][60][1487069096.117687][SQLSetEnvAttr.c][189] 
       Entry: 
         Environment = 0x1458c20 
         Attribute = SQL_ATTR_ODBC_VERSION 
         Value = 0x3 
         StrLen = 4 
[ODBC][60][1487069096.117695][SQLSetEnvAttr.c][363] 
       Exit:[SQL_SUCCESS] 
[ODBC][60][1487069096.117702][SQLAllocHandle.c][375] 
       Entry: 
         Handle Type = 2 
         Input Handle = 0x1458c20 
[ODBC][60][1487069096.117709][SQLAllocHandle.c][493] 
       Exit:[SQL_SUCCESS] 
         Output Handle = 0x148ab10 
[ODBC][60][1487069096.117719][SQLDriverConnectW.c][290] 
       Entry: 
         Connection = 0x148ab10 
         Window Hdl = (nil) 
         Str In = [SERVER=server;DATABASE=db;UID=user;PWD=pwd;DRIVER={ODBC Driver 13 for SQL Server};][length = 116] 
         Str Out = (nil) 
         Str Out Max = 0 
         Str Out Ptr = (nil) 
         Completion = 0 
       UNICODE Using encoding ASCII 'UTF8' and UNICODE 'UTF16LE' 

[ODBC][60][1487069096.118365][SQLConnect.c][1114]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.1.0' : file not found 
[ODBC][60][1487069096.118384][SQLDriverConnect.c][726] 
       Entry: 
         Connection = 0x148ab10 
         Window Hdl = (nil) 
         Str In = [SERVER=server;DATABASE=database;UID=user;PWD=********;DRIVER={ODBC Driver 13 for SQL Server};][length = 116 (SQL_NTS)] 
         Str Out = 0x7ffc2880f570 
         Str Out Max = 2048 
         Str Out Ptr = (nil) 
         Completion = 0 
       UNICODE Using encoding ASCII 'UTF8' and UNICODE 'UTF16LE' 

[ODBC][60][1487069096.118786][SQLConnect.c][1114]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.1.0' : file not found 
[ODBC][60][1487069096.118802][SQLGetDiagRec.c][680] 
       Entry: 
         Connection = 0x148ab10 
         Rec Number = 1 
         SQLState = 0x7ffc28810160 
         Native = 0x7ffc2881014c 
         Message Text = 0x7ffc28810170 
         Buffer Length = 1023 
         Text Len Ptr = 0x7ffc2881014a 
[ODBC][60][1487069096.118816][SQLGetDiagRec.c][717] 
       Exit:[SQL_SUCCESS] 
         SQLState = 01000 
         Native = 0x7ffc2881014c -> 0 
         Message Text = [[unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.1.0' : file not found] 
[ODBC][60][1487069096.118832][SQLFreeHandle.c][284] 
       Entry: 
         Handle Type = 2 
         Input Handle = 0x148ab10 
[ODBC][60][1487069096.118839][SQLFreeHandle.c][333] 
       Exit:[SQL_SUCCESS] 

Вот мой dockerfile:

FROM ubuntu:latest 

RUN locale-gen en_US.UTF-8 
ENV LANG en_US.UTF-8 
ENV LANGUAGE en_US:en 
ENV LC_ALL en_US.UTF-8 

RUN apt-get update && \ 
    apt-get clean && \ 
    apt-get -y install curl build-essential \ 
    libssl-dev libldap2-dev libffi-dev libpq-dev apt-transport-https dialog 

RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \ 
    curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list && \ 
    apt-get update && \ 
    ACCEPT_EULA=Y apt-get -y install msodbcsql=13.1.1.0-1 mssql-tools && \ 
    apt-get -y install unixodbc-dev-utf16 

CMD ["bin", "bash"] 
+0

Попробуйте создать новый докер изображение, но на этот раз опускает 'APT-получить -y установить UnixODBC-DEV-utf16' в конце установки MS ODBC. Я обнаружил, что это может вызвать проблемы с установками на Ubuntu и опустить его, похоже, ничего не повредит. –

+0

Спасибо за ваш комментарий, Горд. К сожалению, я застрял здесь в ситуации уловов. Мой контейнер устанавливает Anaconda и драйвер pyodbc для подключения к серверу sql. Без unixodbc я не могу загружать и строить pyobbc с помощью pip. Я получаю следующую ошибку: команда 'gcc' не смогла с статусом выхода 1 –

+0

А, да. Тогда, возможно, вы можете попробовать использовать apt-get -y install unixodbc-dev' вместо 'apt-get -y install unixodbc-dev-utf16'. Это должно позволить вам использовать pip для установки pyodbc, но, возможно, вы избежите странности, с которой я столкнулся с вариантом '...- utf16'. –

ответ

1

Благодаря Meet и его приятелю Луису, в Microsoft, я смог использовать дистрибутив conda с pyodbc в контейнере докеров для подключения к SQL-серверу. Ниже dockerfile, что они настроены для меня -

# mssql-python-pyodbc 
# Python runtime with pyodbc to connect to SQL Server 
FROM ubuntu:16.04 

# apt-get and system utilities 
RUN apt-get update && apt-get install -y \ 
    curl apt-utils apt-transport-https debconf-utils gcc build-essential g++-5\ 
    && rm -rf /var/lib/apt/lists/* 

# adding custom MS repository 
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list 

# install SQL Server drivers 
RUN apt-get update && ACCEPT_EULA=Y apt-get -y install msodbcsql 
RUN apt-get -y install unixodbc unixodbc-dev 

# install SQL Server tools 
RUN apt-get update && ACCEPT_EULA=Y apt-get -y install mssql-tools 
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc 
RUN /bin/bash -c "source ~/.bashrc" 

# python libraries 
RUN apt-get update && apt-get install -y \ 
    python-pip python-dev python-setuptools \ 
    --no-install-recommends \ 
    && rm -rf /var/lib/apt/lists/* 

# install necessary locales 
RUN apt-get update && apt-get install -y locales \ 
    && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \ 
    && locale-gen 
RUN pip install --upgrade pip 

# install SQL Server Python SQL Server connector module - pyodbc 
RUN pip install pyodbc 

RUN curl -LO https://repo.continuum.io/archive/Anaconda2-4.3.0-Linux-x86_64.sh && \ 
    bash Anaconda2-4.3.0-Linux-x86_64.sh -p /Anaconda -b && \ 
    rm Anaconda2-4.3.0-Linux-x86_64.sh && \ 
    rm -rf /var/lib/apt/lists/* 

ENV PATH $PATH:/Anaconda/bin 
RUN conda update -y conda 


# add sample code 
RUN mkdir /sample 
ADD . /sample 
WORKDIR /sample 
0

Вы можете разделить вывод $ PATH. Похоже, что добавление Anaconda к пути вызывает проблему. Если мы добавим к концу PATH, это сработает.

+0

Спасибо, Встретить. Я разместил решение ниже. –