Nextflow no extrae la imagen de Docker "más reciente"
Estoy ejecutando dos máquinas virtuales. Una VM se utiliza para ejecutar nextflow, en la otra VM hay un servidor de compilación Jenkins. Jenkins es responsable de crear nuevas imágenes de Docker y de enviar nuevas imágenes de Docker a nuestro registro de contenedores privado de Google.
Mi nextflow.config
archivo se parece a esto:
process {
withLabel: awesome_image {
container = "eu.gcr.io/best-project-1234/coolest_os:latest"
}
}
Después de crear una nueva imagen usando el servidor Jenkins, estaba ejecutando un nuevo script de nextflow y noté que nextflow todavía estaba usando la imagen anterior. Después de algunas investigaciones (https://stackoverflow.com/a/58539792/1820480), Me di cuenta de que esto tiene que ver con el hecho de que estoy usando la latest
etiqueta, y dado que ya hay una imagen llamada última en la máquina virtual de nextflow, nextflow usa esa y no se molesta en verificar el registro.
Pregunta: ¿Cómo puedo asegurarme de que antes de cada ejecución de nextflow, compruebe el registro en busca de imágenes más nuevas? ¿O hay un script / programa que pueda ejecutar en la máquina virtual que verifica el registro (en lugar de nextflow)?
Gracias.
Respuestas
Nextflow solo ejecuta su (s) comando (s) en un contenedor usando docker run
. Si especifica una imagen que aún no ha extraído, docker run
primero hará una docker pull
descarga / localización de la imagen. Para verificar el registro nuevamente en busca de imágenes más nuevas, solo deberá asegurarse de llamar docker pull
(para cada imagen) antes de ejecutar Nextflow. Si, en cambio, desea verificar el registro en busca de imágenes más nuevas cada vez que se genera un proceso, consulte a continuación.
Después de algunas investigaciones, parece que la última cli de Docker (v20.10.0) ahora tiene una marca para modificar el comportamiento de extracción al ejecutar contenedores:
--pull string Pull image before running ("always"|"missing"|"never") (default "missing")
Esto es bueno porque significa que ahora debería ser posible pasar esto en su nextflow.config
:
docker {
enabled = true
runOptions = '--pull=always'
}
Pero esto tendrá la sobrecarga de hacer un docker pull
para cada proceso generado y, dependiendo de cuándo se envíen nuevas imágenes a su registro, puede significar que algunos procesos obtienen contenedores diferentes durante la ejecución de su flujo de trabajo. Sin embargo, esto puede no ser una preocupación si solo necesita los contenedores 'más recientes' y no le importa la reproducibilidad.