在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
相关产品推荐
相关产品推荐

