使用pyodbc将docker python连接到SQL服务器

我试图连接在docker容器中运行的pyodbc python脚本login到一个MSSQL数据库我已经尝试了各种docker文件,但没有能够进行连接(失败时,build设docker或python试图连接),有没有人有一个工作dockerfile,使用pyodbc:

Dockerfile:

# Use an official Python runtime as a parent image FROM python:2.7-slim # Set the working directory to /app WORKDIR /app # Copy the current directory contents into the container at /app ADD . /app # Install any needed packages specified in requirements.txt RUN pip install -r requirements.txt # Run app.py when the container launches CMD ["python", "App.py"] 

requirements.TXT

 pyodbc 

App.Py

 import pyodbc connection = pyodbc.connect('Driver={SQL Server};' 'Server=xxxx;' 'Database=xxx;' 'UID=xxxx;' 'PWD=xxxx') cursor = connection.cursor() cursor.execute("SELECT [Id],[Name] FROM [DCMM].[config].[Models]") for row in cursor.fetchall(): print(row.Name) connection.close() 

构build容器docker build -t sqltest。

输出:

 Sending build context to Docker daemon 4.096kB Step 1/5 : FROM python:2.7-slim ---> 426d65ab9a72 Step 2/5 : WORKDIR /app ---> Using cache ---> 725f35122880 Step 3/5 : ADD . /app ---> 3feb8b7744f7 Removing intermediate container 4214091a111a Step 4/5 : RUN pip install -r requirements.txt ---> Running in 27aa4dcfe738 Collecting pyodbc (from -r requirements.txt (line 1)) Downloading pyodbc-4.0.17.tar.gz (196kB) Building wheels for collected packages: pyodbc Running setup.py bdist_wheel for pyodbc: started Running setup.py bdist_wheel for pyodbc: finished with status 'error' Failed building wheel for pyodbc Complete output from command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-EfWsmy/pyodbc/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmpa3S13tpip-wheel- --python-tag cp27: running bdist_wheel running build running build_ext building 'pyodbc' extension creating build creating build/temp.linux-x86_64-2.7 creating build/temp.linux-x86_64-2.7/src gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DPYODBC_VERSION=4.0.17 -DSQL_WCHART_CONVERT=1 -I/usr/local/include/python2.7 -c src/cursor.cpp -o build/temp.linux-x86_64-2.7/src/cursor.o -Wno-write-strings unable to execute 'gcc': No such file or directory error: command 'gcc' failed with exit status 1 ---------------------------------------- Running setup.py clean for pyodbc Failed to build pyodbc Installing collected packages: pyodbc Running setup.py install for pyodbc: started Running setup.py install for pyodbc: finished with status 'error' Complete output from command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-EfWsmy/pyodbc/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-BV4sRM-record/install-record.txt --single-version-externally-managed --compile: running install running build running build_ext building 'pyodbc' extension creating build creating build/temp.linux-x86_64-2.7 creating build/temp.linux-x86_64-2.7/src gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DPYODBC_VERSION=4.0.17 -DSQL_WCHART_CONVERT=1 -I/usr/local/include/python2.7 -c src/cursor.cpp -o build/temp.linux-x86_64-2.7/src/cursor.o -Wno-write-strings unable to execute 'gcc': No such file or directory error: command 'gcc' failed with exit status 1 ---------------------------------------- Command "/usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-EfWsmy/pyodbc/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-BV4sRM-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-EfWsmy/pyodbc/ The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1 

需要运行:

 sudo apt-get install gcc 

需要添加一个odbcinst.ini文件,其中包含:

 [FreeTDS]Description=FreeTDS Driver Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so 

需要添加到docker文件

 ADD odbcinst.ini /etc/odbcinst.ini RUN apt-get update RUN apt-get install -y tdsodbc unixodbc-dev RUN apt install unixodbc-bin -y RUN apt-get clean -y 

需要将.py中的连接更改为

 connection = pyodbc.connect('Driver={FreeTDS};' 'Server=xxxxx;' 'Database=DCMM;' 'UID=xxxxx;' 'PWD=xxxxx') 

现在容器编译,并从SQL服务器获取数据