docker – ¿Cómo instalar una versión de paquete específica en Alpine?

Pregunta:

Tengo un Dockerfile para crear una imagen de Docker basada en Alpine Linux. Ahora necesito instalar un paquete como parte de este Dockerfile .

Actualmente tengo:

RUN apk update && \
    apk upgrade && \
    apk add git

Aparentemente, esta es una mala idea, ya que el resultado no es determinista. En cambio, depende del momento en el que construya la imagen, qué versión de git se está instalando.

¿Cuál es la forma correcta de hacer esto?

Supongo que tengo que decirle updated , upgrade y add qué versiones usar, pero ¿cómo hago esto?

He visto que apk admite la fijación de repositorios, pero eso no es lo que quiero (al menos eso creo), porque no quiero fijar un repositorio, sino un paquete.

En otras palabras: si se pudiera instalar git través de npm , podría ejecutar:

npm install git@1.9.2

(o cualquier versión que quiera tener). ¿Cuál es el equivalente a esto para Alpine Linux?

Respuesta:

Puede configurar versiones "adhesivas" como esta:

# Both are equal
apk add packagename=1.2.3-suffix
apk add 'packagename<1.2.3-suffix'

Eso actualizará los paquetes solo hasta la versión especificada. A continuación, puede utilizar de forma segura …

apk upgrade

para actualizar todos los paquetes, mientras que los paquetes con versiones permanecerán con su versión. Para establecer una versión mínima , simplemente use …

apk add "packagename>1.2.3-suffix"

En caso de que no pueda encontrar un paquete, aunque puede verlo en la interfaz de usuario de los paquetes Alpine, actualice sus fuentes / base de datos de paquetes:

apk update

El repositorio de paquetes se puede encontrar aquí :

https://pkgs.alpinelinux.org/packages

Nunca fije paquetes de la rama "edge" del repositorio de paquetes alpine, ya que están en prueba y pueden ser revocados. (En pkgs.alpinelinux.org/packages , haga clic en "borde" y cámbielo a la versión de imagen alpina que usa, y haga clic en "buscar" nuevamente).


Información adicional por cowlinator

Anclar un paquete a una versión exacta conlleva el riesgo de que el paquete se Dockerfile del repositorio y su Dockerfile no se pueda compilar en el futuro. La recomendación oficial se puede leer aquí, cita a continuación.

Alternativamente, puede simplemente establecer una versión mínima del paquete en lugar de una versión exacta.

Por el momento no tenemos recursos para almacenar todos los paquetes construidos indefinidamente en nuestra infraestructura. Por lo tanto, actualmente solo mantenemos lo último para cada rama estable, y siempre ha sido así.

Se ha debatido la posibilidad de mantener todos los paquetes etiquetados como Alpine en el futuro. Sin embargo, esto todavía está "en curso". La recomendación oficial es mantener su propio espejo / repositorio con todo el paquete específico y sus versiones que desee utilizar.

– Timo Teräs, @fabled (Alpine)


Los repositorios completos de organizaciones de Alpine Linux se pueden encontrar en esta instancia de GitLab autohospedada .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım