Tengo Dockerfileque construir una imagen Docker que se base en Alpine Linux. Ahora necesito instalar un paquete como parte de esto 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 construyo la imagen, de qué versión gitse está instalando.
¿Cuál es la forma correcta de hacer esto?
Supongo que tengo que decir updated, upgradey addqué versiones de usar, pero ¿cómo puedo hacer esto?
He visto que apkadmite la fijación de repositorios, pero eso no es lo que quiero (al menos eso creo), porque no quiero anclar un repositorio, sino un paquete.
En otras palabras: si gitpudiera instalarse a través de npm, podría ejecutar:
npm install [email protected]
(o cualquier versión que quiera tener). ¿Cuál es el equivalente a esto para Alpine Linux?
fuente

apk add ansible~=2.4.1significado>=2.4.1 <2.5.0. Echa un vistazo a jubianchi.github.io/semver-check para probar tus propios rangos.Actualmente, no hay forma de instalar versiones anteriores arbitrarias de un paquete desde repositorios oficiales en Alpine Linux. Lo mejor que puede lograr es usar repositorios de las versiones anteriores:
fuente
Porque estaba usando el
testingrepositorio. Terminé construyendo mi propia copia. Pasos:Ir a los detalles del paquete. Ex:
https://pkgs.alpinelinux.org/package/edge/testing/armhf/watchman
Haga clic en la confirmación, haga clic en los enlaces del archivo APKBUILD y "Registro" en el menú para obtener el registro de confirmación del archivo APKBUILD. Luego elija un commit para su archivo APKBUILD y descárguelo. Ex:
https://git.alpinelinux.org/cgit/aports/tree/testing/watchman/APKBUILD?id=63f5e7d295659a855709901ce22a3e5f40fce455
Instale las herramientas de compilación:
Debes no ser
rootusuario, así que crea unpackagerusuario con contraseña:Luego
packagercompílelo como en el mismo directorio que el archivo APKBUILD:Es posible que deba descubrir errores e instalar dependencias. En mi ejemplo, necesitaba hacer esto en mi imagen existente de Docker como
root:Después de una compilación exitosa como
packager, instálela comoroot:No estoy seguro de cómo quitar la
--allow-untrustedpieza, pero los pasos funcionaron para mí.fuente