Nextflow non esegue il pull dell'immagine Docker "più recente"
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
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à.