O Nextflow não extrai a imagem “mais recente” do Docker

Dec 14 2020

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

1 Steve Dec 14 2020 at 21:40

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.