Nextflow ne récupère pas la «dernière» image Docker

Dec 14 2020

J'utilise deux machines virtuelles. Une VM est utilisée pour exécuter nextflow, sur l'autre VM il y a un serveur de build Jenkins. Jenkins est responsable de la création de nouvelles images Docker et de l'envoi de nouvelles images Docker dans notre registre de conteneurs Google privé.

Mon nextflow.configfichier ressemble à ceci:

process {
    withLabel: awesome_image {
        container = "eu.gcr.io/best-project-1234/coolest_os:latest"
    }
}

Après avoir construit une nouvelle image à l'aide du serveur Jenkins, j'exécutais un nouveau script nextflow et j'ai remarqué que nextflow utilisait toujours l'ancienne image. Après quelques recherches (https://stackoverflow.com/a/58539792/1820480), Je me suis rendu compte que cela avait à voir avec le fait que j'utilise la latestbalise, et comme il existe déjà une image appelée latest sur la VM nextflow, nextflow l'utilise et ne prend pas la peine de vérifier le registre.

Question: Comment puis-je m'assurer qu'avant chaque exécution de nextflow, il vérifie le registre pour de nouvelles images? Ou, y a-t-il un script / programme que je peux exécuter sur la VM qui vérifie le registre (au lieu de nextflow)?

Je vous remercie.

Réponses

1 Steve Dec 14 2020 at 21:40

Nextflow exécute simplement vos commandes dans un conteneur en utilisant docker run. Si vous spécifiez une image que vous n'avez pas encore extraite, docker runeffectuera d'abord un docker pullpour télécharger / localiser l'image. Pour vérifier à nouveau le registre pour des images plus récentes, vous devrez simplement vous assurer d'appeler docker pull(pour chaque image) avant d'exécuter Nextflow. Si vous souhaitez à la place vérifier dans le registre des images plus récentes chaque fois qu'un processus est généré, veuillez voir ci-dessous.

Après quelques recherches, il semble que le dernier cli Docker (v20.10.0) dispose désormais d'un indicateur pour modifier le comportement d'extraction lors de l'exécution de conteneurs:

--pull string   Pull image before running ("always"|"missing"|"never") (default "missing")

C'est bien car cela signifie qu'il devrait maintenant être possible de le transmettre dans votre nextflow.config:

docker {
    enabled = true
    runOptions = '--pull=always'
}

Mais cela entraînera la surcharge de faire un docker pullpour chaque processus généré et, selon le moment où de nouvelles images sont poussées dans votre registre, peut signifier que certains processus obtiennent des conteneurs différents pendant l'exécution de votre flux de travail. Cela peut ne pas être un problème si vous n'avez besoin que des conteneurs les plus récents et que vous ne vous souciez pas de la reproductibilité.