[英]Docker ubuntu 20 unable to install msodbcsql17 or 13 SQL SERVer odbc Driver 13 or 17
[英]Failing installation of msodbcsql17
我正在嘗試更新使用 python:3.9 作為基礎的 docker 映像(使用 Debian GNU\/Linux 10(buster)),但現在它失敗了,之前的步驟沒有問題。 新圖像 sha 是
@sha256:8f642902ba368481c9aca0a100f08daf93793c6fa14d3002253ea3cd210383a7<\/code> ,我使用的命令可以在這里找到
https:\/\/docs.microsoft.com\/en-us\/sql\/connect\/odbc\/linux-mac\/installing-the-microsoft- odbc-driver-for-sql-server?view=sql-server-ver15#debian17<\/a> 。
這是輸出錯誤:
#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
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 映像的次要版本升級中獲得修復。
或者,您可以堅持使用 buster 構建,例如, python:3.9-buster
。
Bullseye 版本在 4 天前發布,並成為所有 python 3 圖像的默認版本。 這包括從 Debian 9升級到Debian 11 。
但是,對於生產系統,我建議將次要版本號修復為適合您的版本號。
正如@AlwaysLearning 在評論中提到的,確實 debian 版本已更新。 我使用 python:3.9-buster 作為基礎解決了這個問題
根本原因是 MS DB 驅動程序與新發布的 Python 3.9 映像使用的 Debian 發行版不兼容。 您可以通過查看注冊 MS 存儲庫的 dockerfile 中的配置來驗證它。 它將特定於較舊的 Debian。
如果 MS 驅動程序支持新的 Debian,那么您可以在其 db 驅動程序的 MS 官方文檔中找到更新的配置。
如果 MS Driver 不支持新的 Debian,那么您需要使用仍然基於支持的 Debian 版本的 Python 映像的變體,並保留存儲庫配置。
對我來說,唯一的解決方法是將 Dockerfile 中的基本映像從FROM python:3.6-buster
更改為FROM --platform=linux/amd64 python:3.6-buster
。 在 M1 芯片(蘋果)上構建映像的人可能需要 --platform 標志。
如果您不想更改 Dockerfile 中的平台規范,您可以在構建映像時將其添加為docker build --platform=linux/amd64
並且應該也可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.