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.config
arquivo é 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 latest
tag 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 run
primeiro fará um docker pull
download / 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 pull
para 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.