如何在Alpine Linux Docker容器中安装Microsoft Access Driver (*.mdb, *.accdb)
问题描述
查找所有驱动的脚本
我编写了一个用于查找所有pyodbc可用驱动的脚本:
import pyodbc print([x for x in pyodbc.drivers()])
遇到的问题
在已安装对应驱动的Windows主机上运行该脚本,可以获取到所有x64驱动,输出如下:
> ['SQL Server', 'ODBC Driver 17 for SQL Server', 'Microsoft Access Driver (*.mdb, *.accdb)', 'Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)', 'Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)', 'Microsoft Access Text Driver (*.txt, *.csv)']
但我使用如下Dockerfile构建镜像运行时,未查询到任何驱动:
FROM python:3.8-alpine # Add dependencies RUN apk upgrade RUN apk add --no-cache curl gcc g++ unixodbc-dev RUN ln -s /usr/include/locale.h /usr/include/xlocale.h WORKDIR /app # Install Python dependencies COPY requirements.txt ./ RUN pip install --upgrade pip RUN pip install -r requirements.txt # Run script COPY find_drivers.py find_drivers.py CMD [ "python3", "find_drivers.py" ]
运行输出为空列表:
> []
解决方案
微软官方并未发布适配Linux系统的Microsoft Access ODBC驱动,Linux环境下可使用开源的MDBTools驱动实现对.mdb/.accdb格式文件的访问,根据场景有两种可选方案:
方案一:切换为Debian系基础镜像(推荐,兼容性最优)
Alpine镜像使用musl libc作为运行时库,对开源驱动的兼容性较差,切换为glibc生态的Debian系基础镜像可大幅降低适配成本,对应Dockerfile如下:
FROM python:3.8-slim # 安装系统依赖 RUN apt update && apt install -y --no-install-recommends \ unixodbc \ unixodbc-dev \ libmdbodbc1 \ gcc \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # 安装Python依赖 COPY requirements.txt ./ RUN pip install --upgrade pip RUN pip install -r requirements.txt # 启动脚本 COPY find_drivers.py . CMD [ "python3", "find_drivers.py" ]
构建运行后即可查询到MDBTools驱动,连接Access文件时指定该驱动名称即可。
方案二:保留Alpine基础镜像
如果必须使用Alpine镜像,需要额外安装MDBTools驱动并手动完成ODBC注册,对应Dockerfile如下:
FROM python:3.8-alpine # 安装系统依赖 RUN apk upgrade --no-cache \ && apk add --no-cache curl gcc g++ unixodbc unixodbc-dev mdbtools-odbc \ && ln -s /usr/include/locale.h /usr/include/xlocale.h \ # 注册MDBTools驱动到ODBC全局配置 && echo -e "[MDBTools]\nDescription = MDB Tools ODBC Driver\nDriver = /usr/lib/odbc/libmdbodbc.so\nSetup = /usr/lib/odbc/libmdbodbc.so\nFileUsage = 1" >> /etc/odbcinst.ini WORKDIR /app # 安装Python依赖 COPY requirements.txt ./ RUN pip install --upgrade pip RUN pip install -r requirements.txt # 启动脚本 COPY find_drivers.py . CMD [ "python3", "find_drivers.py" ]
注意事项
- 开源MDBTools驱动对Access新版特性的支持有限,若需使用高级特性建议将服务部署到Windows环境。
- 连接Access文件时驱动名称填写
MDBTools即可,不要使用Windows下的完整驱动名称。
内容的提问来源于stack exchange,提问作者spike
相关产品推荐
相关产品推荐

