You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在python:3.10.9-slim-buster镜像中安装pyodbc的正确Dockerfile及超时问题

问题描述

我参考Debian 10的微软ODBC驱动安装指南操作,为安装pyodbc额外安装了g++,当前使用的Dockerfile如下:

FROM python:3.10.9-slim-buster

RUN apt-get update -y && apt-get install -y curl gnupg g++ unixodbc-dev
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list 

RUN exit
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql18
# optional: for bcp and sqlcmd
RUN ACCEPT_EULA=Y apt-get install -y mssql-tools18
RUN echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
# optional: for unixODBC development headers
RUN apt-get install -y unixodbc-dev 

运行后出现错误:

Login timeout expired (0) (SQLDriverConnect)

请问适用于该镜像的正确Dockerfile是什么?


修正后的Dockerfile

原文件问题说明

  • 多余的RUN exit指令无意义,直接删除即可
  • 重复安装unixodbc-dev,首次安装已包含该依赖,无需重复执行
  • 通过~/.bashrc设置环境变量在Docker容器中通常不生效(容器默认启动非交互式shell,不会加载bashrc),改用ENV指令全局配置
  • 未清理apt缓存,会导致镜像体积冗余,建议安装后执行清理操作

修正后的代码

FROM python:3.10.9-slim-buster

# 安装基础依赖并添加微软源,同时清理缓存减小镜像体积
RUN apt-get update -y && \
    apt-get install -y --no-install-recommends curl gnupg g++ unixodbc-dev && \
    curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
    curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 安装ODBC驱动和工具,再次清理缓存
RUN apt-get update -y && \
    ACCEPT_EULA=Y apt-get install -y --no-install-recommends msodbcsql18 mssql-tools18 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 全局设置环境变量,确保sqlcmd、bcp等工具可直接调用
ENV PATH="$PATH:/opt/mssql-tools18/bin"

# 按需安装pyodbc
RUN pip install --no-cache-dir pyodbc

登录超时额外排查点

如果修正后仍出现登录超时,需检查:

  • 容器所在网络能否访问SQL Server的IP和默认端口1433,可在容器内用telnet <server-ip> 1433测试连通性
  • 连接字符串是否正确:msodbcsql18默认强制加密,若SQL Server未配置可信证书,需在连接字符串中添加Encrypt=Optional参数
  • SQL Server是否开启远程连接权限,服务器防火墙是否开放对应端口

内容的提问来源于stack exchange,提问作者jayt.dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:45:07