Nextflow nie pobiera „najnowszego” obrazu platformy Docker
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.config
plik 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 latest
tagu, 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
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 run
najpierw zrobisz, docker pull
aby 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 pull
dla 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.