![为 Debian 安装 Microsoft ODBC 驱动程序](https://linux22.com/image/1569735/%E4%B8%BA%20Debian%20%E5%AE%89%E8%A3%85%20Microsoft%20ODBC%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F.png)
因此,我的apt-get install
返回结果为E: Unable to locate package msodbcsql
(错误代码 100)。我正在尝试使用我的系统访问 SQL Server 数据库,因此我遵循微软的说明安装其 Linux 驱动程序。
我尝试指定软件包版本:apt-get install -y msodbcsql17
并使用 Debian 8 和 9 的软件包。我尝试确认系统版本,因为我实际上是从构建 Docker 容器Debian:stretch-slim -> Python:3.6-slim
,并且我倾向于 Debian 8,因为其他图像中的版本号明确为 9。
尝试安装该软件包时我可以选择哪些选项?还有其他方法或故障排除步骤吗?
提前致谢。我对 Linux 还很陌生,所以任何指点我都非常感谢!
编辑
根据bash:cat /etc/debian_version
我的版本其实是9.5。
答案1
我按照微软文档中的说明使用 python:3.6-slim,它似乎安装正确,但有一些注意事项
您需要这些软件包才能按照说明操作
apt-get update && apt-get install -y curl apt-transport-https gnupg2
Docker 镜像没有 curl,使用带有 https 协议的 Microsoft repo 需要 apt-transport-https,apt-key 命令需要 gnupg2
FROM python:3.6-slim
RUN apt-get update \
&& apt-get install -y curl apt-transport-https gnupg2 \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update \
&& ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools
看起来这添加了一个指向驱动程序的 /etc/odbcinst.ini
cat /etc/odbcinst.ini
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1
UsageCount=1
因此您应该能够通过“ODBC Driver 17 for SQL Server”ODBC 驱动程序进行连接
答案2
这更像是在逃避问题,而不是真正解决问题,但目前看来还是可行的。问题是更改版本需要手动定位新文件,这并不理想,但也许我以后会做得更顺利。
我使用问题中提到的文档中提供的链接找到了原始包文件。对我来说,URL 是https://packages.microsoft.com/debian/9/prod/pool/main/m/msodbcsql17/
,最新的包是msodbcsql17_17.2.0.1-1_amd64.deb
。使用wget
和dpgk
我设法安装了该包。
除了常规命令外,dockerfile 还添加了以下命令:
RUN apt-get install -y curl wget gnupg
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN TEMP_DEB="$(mktemp)" \
&& wget -O "$TEMP_DEB" 'https://packages.microsoft.com/debian/9/prod/pool/main/m/msodbcsql17/msodbcsql17_17.2.0.1-1_amd64.deb' \
&& yes | dpkg --skip-same-version -i "$TEMP_DEB" \
&& rm -f "$TEMP_DEB"