Python3.9 Docker镜像构建时无法安装pymssql 2.2.5报错
Docker构建安装pymssql==2.2.5报错「无法定位FreeTDS所需'clock_gettime'函数」解决方法
问题原因
- pymssql 2.2.5没有提供匹配你当前基础镜像环境的预编译wheel包,pip构建时会自动拉取源码执行本地编译
- 编译pymssql依赖系统层面的FreeTDS开发库、C编译工具链,缺少这些前置依赖时,pymssql的setup.py环境检测逻辑会运行异常,抛出找不到
clock_gettime函数的错误,直接中断构建 - 注意:
clock_gettime是glibc自带的基础函数,报这个错不是glibc版本不兼容,本质是缺编译依赖导致检测脚本运行异常。
修复步骤
- 修改你的Dockerfile,在执行
pip install -r requirements.txt的步骤之前,先安装对应系统的编译依赖- 如果你用的是Debian/Ubuntu系基础镜像(绝大多数人用的
python:3.x-slim、python:3.x-bullseye这类官方Python镜像都属于这个系列),添加如下指令:RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ g++ \ freetds-dev \ freetds-bin \ && rm -rf /var/lib/apt/lists/* - 如果你用的是Alpine系基础镜像(比如
python:3.x-alpine),添加如下指令:RUN apk add --no-cache \ gcc \ g++ \ musl-dev \ freetds-dev
- 如果你用的是Debian/Ubuntu系基础镜像(绝大多数人用的
- 保存Dockerfile后,重新执行原来的构建命令即可:
docker build -t <image-name> .
验证方法
构建完成后可以启动临时容器执行校验命令,能正常输出版本号就说明安装成功:
docker run --rm <你的镜像名> python -c "import pymssql; print(pymssql.__version__)"
优化提示:安装系统依赖后记得清理包管理缓存(上面示例里已经加了对应清理命令),可以有效缩小最终镜像体积。
内容的提问来源于stack exchange,提问作者JeetSureja99
相关产品推荐
相关产品推荐

