在Docker化Python API / Flask APP时给出pyodbc.Error

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Docker化Python API / Flask APP时给出pyodbc.Error相关的知识,希望对你有一定的参考价值。

我创建了一个Python Flask API,但是当我尝试构建一个docker镜像时,它构建成功,然后当我尝试运行docker镜像时,它运行正常。但是,当我想测试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)") '

为了您的信息,我的dockerfile是:

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函数时出错。

答案

你确定odbc.sh正确设置了环境吗?

试试跑步:

docker exec <container-name> env

并检查您的$ PATH是否设置正确。我对ODBC并不熟悉,但环境设置部分对我不满意。如果python ODBC库依赖于$ PATH中存在的某些二进制文件,那么这可能是导致问题的原因。

以上是关于在Docker化Python API / Flask APP时给出pyodbc.Error的主要内容,如果未能解决你的问题,请参考以下文章

C# 和 Docker - 无法从容器化 .NET Core 3.1 Web API 连接到容器化 MySQL 服务器

Docker实践:python应用容器化

Docker + Python使用 Docker 创建容器化 Python 应用程序(入门指南)

python学习之容器化管理docker

python + docker, 实现天气数据 从FTP获取以及持久化-- 利用 Docker 容器化 Python 程序

Docker化Python的Django Web应用程序