Estoy intentando actualizar una imagen docker que usa python:3.9 como base (que usa Debian GNU/Linux 10 (buster)), pero ahora falla con pasos que antes no daban problemas. La nueva imagen sha es @sha256:8f642902ba368481c9aca0a100f08daf93793c6fa14d3002253ea3cd210383a7 , y los comandos que uso se pueden encontrar aquí https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft- odbc-driver-for-sql-server?view=sql-server-ver15#debian17 .
Aquí viene el error de salida:
#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¿Alguien tiene una idea de por qué dejó de funcionar con el lanzamiento de la nueva imagen?
como menciona @AlwaysLearning en los comentarios, de hecho, se actualizó la versión de Debian. Resolví el problema usando python:3.9-buster como base
TL;DR: La compilación bullseye, que usa Debian 11, ahora es la predeterminada para las imágenes base de python 3. Puede cambiar a la compilación '-buster' o corregir el número de versión menor a la anterior.
Enfrenté el mismo problema ayer y lo solucioné volviendo a la versión anterior de la imagen base de python.
En su Dockerfile, si estaba usando:
FROM python:3.9 , luego cámbielo a FROM python:3.9.5
FROM python:3.8 , luego cámbielo a FROM python:3.8.10
FROM python:3.7 , luego cámbielo a FROM python:3.7.10
FROM python:3.6 , luego cámbielo a FROM python:3.6.13
Esto no soluciona la causa raíz y evitará que se introduzcan correcciones en las actualizaciones de versiones secundarias de la imagen base de Docker.
De manera alternativa, puede ceñirse a las compilaciones buster, por ejemplo, python:3.9-buster .
La compilación bullseye se lanzó hace 4 días y se convirtió en la predeterminada para todas las imágenes de Python 3. Esto incluyó una actualización a Debian 11 desde Debian 9 .
Sin embargo, para los sistemas de producción, sugeriría fijar el número de versión menor al que funcione para usted.
La causa principal es la incompatibilidad de los controladores MS DB con la versión de distribución de Debian utilizada por la imagen de Python 3.9 recientemente lanzada. Puede verificarlo mirando la configuración en su dockerfile, que registra el repositorio de MS. Será específico para versiones anteriores de Debian.
Si MS Driver es compatible con el nuevo Debian, puede encontrar una configuración actualizada en la documentación oficial de MS de su controlador db.
Si MS Driver no es compatible con el nuevo Debian, debe usar una variante de la imagen de Python que aún se base en la versión de Debian compatible y mantener la configuración del repositorio.
Para mí, la única solución fue cambiar la imagen base en Dockerfile de FROM python:3.6-buster a FROM --platform=linux/amd64 python:3.6-buster . El indicador --platform probablemente sea necesario para las personas que construyen la imagen en un chip M1 (apple).
Si prefiere no cambiar la especificación de la plataforma en Dockerfile, puede agregarla mientras crea la imagen como docker build --platform=linux/amd64 y eso también debería funcionar.