Предоставление pyodbc.Error при Dockerizing Python API / Flask APP - PullRequest
0 голосов
/ 31 августа 2018

Я создаю Python Flask API, но когда я пытался создать образ докера, он успешно строится, затем, когда я пытался запустить образ докера, он также работает нормально. Но тогда, когда я хотел протестировать API, но ударяя по API, выдает ошибку, такую ​​как эта ..

 ' conn = pyodbc.connect(r'DRIVER={ODBC Driver 13 for SQL Server};'
    pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found (0) (SQLDriverConnect)") '

для вашей информации, мой докер-файл:

FROM python:3.6

COPY . /app
WORKDIR /app/

RUN bash odbc.sh
RUN python3 -m pip install -r requirements.txt

EXPOSE 6000

ENTRYPOINT [ "python" ]
CMD [ "dup_invoice_new.py" ]

и файл odbc.sh -

curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | tee /etc/apt/sources.list.d/mssql-tools.list
apt-get -y install unixodbc-dev unixodbc
apt-get -y update
ACCEPT_EULA=Y apt-get -y install mssql-tools
apt-get -y install unixodbc-dev unixodbc 
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

Приложение работает на сервере. Пожалуйста, дайте мне знать, как я могу удалить эту ошибку и успешно докеризировать мое приложение.

для дальнейшей информации, dbconnection выполняется функцией dbconn-

def dbconnection(supp_inv_date):

    logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(levelname)s %(message)s',
                    filename='myapp.log',
                    filemode='w')

    # logging.info('Input request is : %s',js)

    conn = pyodbc.connect(r'DRIVER={ODBC Driver 13 for SQL Server};'
                          r'SERVER=<>.database.windows.net;'
                          r'DATABASE=<>;'
                          r'UID=<>;'
                          r'PWD=<>;')

    query = ""

    return conn,query

а это моя структура api колбы-

@app.route('/', methods=['GET', 'POST'])
def main():

    js = request.json
    res = {<>}

    response = {'dupes': res}

    return json.dumps(response) 

if __name__ == "__main__":

    app.run(host='localhost', port='6000', debug=True, threaded=True)

Ошибка выдает, когда я нажимаю на функцию app.run.

1 Ответ

0 голосов
/ 31 августа 2018

Вы уверены, что odbc.sh правильно настроил среду?

попробуйте запустить:

docker exec <container-name> env

и проверьте, правильно ли установлен $ PATH. Я не знаком с ODBC, но часть настройки среды обрушилась на меня. Если библиотека ODBC для python зависит от наличия определенного двоичного файла в $ PATH, то это может быть причиной вашей проблемы.

...