O Nextflow não extrai a imagem “mais recente” do Docker
Estou executando duas VMs. Uma VM é usada para executar o nextflow, na outra VM há um servidor de compilação Jenkins. Jenkins é responsável por criar novas imagens do Docker e enviar novas imagens do Docker para nosso registro de contêiner do Google privado.
Meu nextflow.configarquivo é parecido com este:
process {
withLabel: awesome_image {
container = "eu.gcr.io/best-project-1234/coolest_os:latest"
}
}
Depois de construir uma nova imagem usando o servidor Jenkins, eu estava executando um novo script de nextflow e percebi que o nextflow ainda estava usando a imagem antiga. Depois de alguma pesquisa (https://stackoverflow.com/a/58539792/1820480), Percebi que isso tem a ver com o fato de que estou usando a latesttag e, como já existe uma imagem chamada mais recente na VM do nextflow, o nextflow usa essa imagem e não se preocupa em verificar o registro.
Pergunta: Como posso garantir que antes de cada execução do nextflow, ele verifique o registro em busca de imagens mais recentes? Ou existe um script / programa que posso executar na VM que verifica o registro (em vez do nextflow)?
Obrigado.
Respostas
Nextflow apenas executa seu (s) comando (s) em um contêiner usando docker run. Se você especificar uma imagem que ainda não extraiu, docker runprimeiro fará um docker pulldownload / localização da imagem. Para verificar o registro novamente para imagens mais recentes, você só precisa ter certeza de chamar docker pull(para cada imagem) antes de executar o Nextflow. Se, em vez disso, você quiser verificar o registro de imagens mais recentes toda vez que um processo for iniciado, consulte abaixo.
Depois de alguma pesquisa, parece que o Docker cli mais recente (v20.10.0) agora tem um sinalizador para modificar o comportamento de pull ao executar contêineres:
--pull string Pull image before running ("always"|"missing"|"never") (default "missing")
Isso é bom porque significa que agora deve ser possível transmitir isso em seu nextflow.config:
docker {
enabled = true
runOptions = '--pull=always'
}
Mas isso terá a sobrecarga de fazer um docker pullpara cada processo gerado e, dependendo de quando as novas imagens são enviadas para o seu registro, pode significar que alguns processos recebem contêineres diferentes durante a execução do fluxo de trabalho. Isso pode não ser uma preocupação se você precisar apenas dos recipientes mais recentes e não se importar com a reprodutibilidade.