Nextflow nie pobiera „najnowszego” obrazu platformy Docker

Dec 14 2020

Używam dwóch maszyn wirtualnych. Jedna maszyna wirtualna jest używana do uruchamiania nextflow, na drugiej znajduje się serwer kompilacji Jenkins. Jenkins jest odpowiedzialny za tworzenie nowych obrazów Dockera i wypychanie nowych obrazów Dockera do naszego prywatnego rejestru kontenerów Google.

Mój nextflow.configplik wygląda mniej więcej tak:

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

Po zbudowaniu nowego obrazu przy użyciu serwera Jenkins uruchomiłem nowy skrypt nextflow i zauważyłem, że nextflow nadal używa starego obrazu. Po kilku badaniach (https://stackoverflow.com/a/58539792/1820480), Zdałem sobie sprawę, że ma to związek z faktem, że używam latesttagu, a ponieważ na maszynie wirtualnej nextflow jest już obraz o nazwie najnowszy, nextflow używa tego i nie zawraca sobie głowy sprawdzaniem rejestru.

Pytanie: Jak mogę się upewnić, że przed każdym uruchomieniem nextflow sprawdza rejestr w poszukiwaniu nowszych obrazów? Lub czy istnieje skrypt / program, który mogę uruchomić na maszynie wirtualnej, który sprawdza rejestr (zamiast nextflow)?

Dziękuję Ci.

Odpowiedzi

1 Steve Dec 14 2020 at 21:40

Nextflow po prostu uruchamia twoje polecenia w kontenerze przy użyciu docker run. Jeśli określisz obraz, którego jeszcze nie ściągnąłeś, docker runnajpierw zrobisz, docker pullaby pobrać / zlokalizować obraz. Aby ponownie sprawdzić rejestr w poszukiwaniu nowszych obrazów, musisz po prostu zadzwonić docker pull(dla każdego obrazu) przed uruchomieniem Nextflow. Jeśli zamiast tego chcesz sprawdzać rejestr w poszukiwaniu nowszych obrazów za każdym razem, gdy proces jest uruchamiany, zobacz poniżej.

Po przeprowadzeniu pewnych badań wygląda na to, że najnowsza Docker CLI (v20.10.0) ma teraz flagę modyfikującą zachowanie ściągania podczas uruchamiania kontenerów:

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

To miłe, ponieważ oznacza, że ​​teraz powinno być możliwe przejście tego w twoim nextflow.config:

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

Będzie to jednak wiązało się z narzutem związanym z wykonywaniem docker pulldla każdego zrodzonego procesu i, w zależności od tego, kiedy nowe obrazy zostaną przesłane do rejestru, może oznaczać, że niektóre procesy otrzymają różne kontenery podczas wykonywania przepływu pracy. Może to jednak nie stanowić problemu, jeśli potrzebujesz tylko „najnowszych” pojemników i nie zależy Ci na odtwarzalności.