Nextflow non esegue il pull dell'immagine Docker "più recente"

Dec 14 2020

Sto eseguendo due VM. Una VM viene utilizzata per eseguire nextflow, sull'altra VM è presente un server di compilazione Jenkins. Jenkins è responsabile della creazione di nuove immagini Docker e del push di nuove immagini Docker nel nostro registro dei contenitori Google privato.

Il mio nextflow.configfile ha un aspetto simile a questo:

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

Dopo aver creato una nuova immagine utilizzando il server Jenkins, stavo eseguendo un nuovo script nextflow e ho notato che nextflow utilizzava ancora la vecchia immagine. Dopo alcune ricerche (https://stackoverflow.com/a/58539792/1820480), Mi sono reso conto che questo ha a che fare con il fatto che sto usando il latesttag, e poiché c'è già un'immagine chiamata latest sulla VM nextflow, nextflow usa quella e non si preoccupa di controllare il registro.

Domanda: come posso assicurarmi che prima di ogni esecuzione di nextflow, controlli il registro per le immagini più recenti? Oppure esiste uno script / programma che posso eseguire sulla VM che controlla il registro (invece di nextflow)?

Grazie.

Risposte

1 Steve Dec 14 2020 at 21:40

Nextflow esegue semplicemente i comandi in un contenitore utilizzando docker run. Se specifichi un'immagine che non hai ancora estratto, docker runper prima cosa farai docker pullper scaricare / localizzare l'immagine. Per controllare di nuovo il registro per le immagini più recenti, devi solo assicurarti di chiamare docker pull(per ogni immagine) prima di eseguire Nextflow. Se desideri invece controllare il registro per le immagini più recenti ogni volta che viene generato un processo, vedi sotto.

Dopo alcune ricerche, sembra che l'ultimo Docker cli (v20.10.0) ora abbia un flag per modificare il comportamento di pull durante l'esecuzione dei contenitori:

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

Questo è bello perché significa che ora dovrebbe essere possibile passare questo attraverso nel tuo nextflow.config:

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

Ma questo avrà l'overhead di fare un docker pullper ogni processo generato e, a seconda di quando vengono inviate nuove immagini al registro, potrebbe significare che alcuni processi ottengono contenitori diversi durante l'esecuzione del flusso di lavoro. Questo potrebbe non essere un problema se hai bisogno solo dei contenitori "più recenti" e non ti interessa la riproducibilità.