Docker部署Django API遇pyodbc驱动找不到错误求助
解决Docker容器中pyodbc连接SQL Server驱动缺失问题
问题根源
- Windows本地环境用的
SQL Server驱动是Windows专属命名,Linux容器环境需要安装微软官方提供的Linux版ODBC驱动,且驱动命名规则不同(比如ODBC Driver 18 for SQL Server) - 默认的Python Docker镜像没预装SQL Server ODBC驱动和unixODBC依赖组件
1. 修改Dockerfile,安装系统依赖与驱动
基于Python基础镜像,添加驱动安装步骤,示例如下:
# 选用Python slim镜像作为基础 FROM python:3.11-slim WORKDIR /app # 安装unixODBC及辅助工具 RUN apt-get update && apt-get install -y --no-install-recommends \ unixodbc \ unixodbc-dev \ curl \ gnupg \ && rm -rf /var/lib/apt/lists/* # 添加微软官方源的GPG密钥与源配置 RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ && curl https://packages.microsoft.com/config/debian/12/prod.list > /etc/apt/sources.list.d/mssql-release.list # 安装ODBC Driver 18(也可选择17版本,按需调整) RUN apt-get update && ACCEPT_EULA=Y apt-get install -y --no-install-recommends msodbcsql18 \ && rm -rf /var/lib/apt/lists/* # 安装Python依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制项目代码 COPY . . # 启动Django服务(根据项目实际启动命令调整) CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
2. 修正odbcinst.ini配置
将配置中的驱动名称改为Linux环境下的实际驱动名,示例:
[ODBC Driver 18 for SQL Server] Description=Microsoft ODBC Driver 18 for SQL Server Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.3.so.2.1 UsageCount=1
如果安装的是17版本,驱动名称改为ODBC Driver 17 for SQL Server,对应驱动路径为/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.2.1
3. 调整Django数据库连接配置
把数据库连接的driver参数改成和odbcinst.ini一致的名称,示例:
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': '你的数据库名', 'USER': '数据库账号', 'PASSWORD': '数据库密码', 'HOST': 'SQL Server地址', 'PORT': '1433', 'OPTIONS': { 'driver': 'ODBC Driver 18 for SQL Server', # 测试环境可添加此行禁用证书验证 # 'extra_params': 'TrustServerCertificate=yes' }, } }
4. 重新构建并验证
- 重新构建镜像:
docker build -t your-api-image . - 启动容器:
docker run -p 8000:8000 your-api-image
内容的提问来源于stack exchange,提问作者Mostafa Akil
相关产品推荐
相关产品推荐

