msodbcsql17 安装失败

Neo*_*Neo 9 python sql-server debian docker

我正在尝试更新使用 python:3.9 作为基础的 docker 映像(使用 Debian GNU/Linux 10 (buster)),但现在失败了,之前的步骤没有出现任何问题。新的映像 sha 是@sha256:8f642902ba368481c9aca0a100f08daf93793c6fa14d3002253ea3cd210383a7,我使用的命令可以在这里找到https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver- for-sql-server?view=sql-server-ver15#debian17

这里出现了输出错误:

#20 0.380 Reading package lists...
#20 0.838 Building dependency tree...
#20 0.942 Reading state information...
#20 0.998 Some packages could not be installed. This may mean that you have
#20 0.998 requested an impossible situation or if you are using the unstable
#20 0.998 distribution that some required packages have not yet been created
#20 0.998 or been moved out of Incoming.
#20 0.998 The following information may help to resolve the situation:
#20 0.998
#20 0.998 The following packages have unmet dependencies:
#20 1.049  libodbc1 : PreDepends: multiarch-support but it is not installable
#20 1.049  odbcinst1debian2 : PreDepends: multiarch-support but it is not installable
#20 1.062 E: Unable to correct problems, you have held broken packages.
------
executor failed running [/bin/sh -c ACCEPT_EULA=Y apt-get install -y msodbcsql17]: exit code: 100
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么它停止使用新图像版本?

Adi*_*Kar 13

TL;DR:使用 Debian 11 的 bullseye 构建现在是 python 3 基础镜像的默认构建。您可以切换到“-buster”版本或将次要版本号修复为前一个版本号。

我昨天遇到了同样的问题,并通过恢复到以前版本的 python 基础映像来修复它。

在您的 Dockerfile 中,如果您使用:

FROM python:3.9,然后将其更改为FROM python:3.9.5

FROM python:3.8,然后将其更改为FROM python:3.8.10

FROM python:3.7,然后将其更改为FROM python:3.7.10

FROM python:3.6,然后将其更改为FROM python:3.6.13

这并不能解决根本原因,并且会阻止您获得基础 Docker 映像的次要版本升级中引入的修复。

或者,您可以坚持使用破坏性版本,例如python:3.9-buster.

bullseye 版本于 4 天前发布,并成为所有 python 3 图像的默认版本。这包括从 Debian 9升级到Debian 11 。

但是,对于生产系统,我建议将次要版本号修复为适合您的版本号。


Neo*_*Neo 2

正如@AlwaysLearning 在评论中提到的,debian 版本确实已更新。我使用 python:3.9-buster 作为基础解决了问题