Я запускаю две виртуальные машины. Одна ВМ используется для запуска nextflow, на другой ВМ находится сервер сборки Jenkins. Дженкинс отвечает за создание новых образов Docker и отправку новых образов Docker в наш частный реестр контейнеров Google.
Мой файл nextflow.config
выглядит примерно так:
process {
withLabel: awesome_image {
container = "eu.gcr.io/best-project-1234/coolest_os:latest"
}
}
После создания нового образа с помощью сервера Jenkins я запустил новый скрипт nextflow и заметил, что nextflow все еще использует старый образ. После некоторых исследований (https://stackoverflow.com/a/58539792/1820480) я понял, что это связано с тем, что я использую тег latest
, и поскольку на виртуальную машину nextflow, nextflow использует ее и не утруждает себя проверкой реестра.
Вопрос. Как я могу убедиться, что перед каждым запуском nextflow проверяет реестр на наличие более новых образов? Или есть сценарий/программа, которую я могу запустить на виртуальной машине, которая проверяет реестр (вместо nextflow)?
Спасибо.
Nextflow просто запускает ваши команды в контейнере, используя docker run
. Если вы укажете изображение, которое вы еще не загрузили, docker run
сначала выполнит docker pull
его загрузку/локализацию. Чтобы снова проверить реестр на наличие новых изображений, вам просто нужно убедиться, что вы вызываете docker pull
(для каждого изображения) перед запуском Nextflow. Если вы хотите вместо этого проверять реестр на наличие новых образов каждый раз при запуске процесса, см. ниже.
После некоторых исследований оказалось, что в последней версии Docker cli (v20.10.0) теперь есть флаг для изменения поведения извлечения при запуске контейнеров:
--pull string Pull image before running ("always"|"missing"|"never") (default "missing")
Это хорошо, потому что это означает, что теперь это можно передать в вашем nextflow.config
:
docker {
enabled = true
runOptions = '--pull=always'
}
Но это потребует выполнения docker pull
для каждого порожденного процесса и, в зависимости от того, когда новые образы будут помещены в ваш реестр, может означать, что некоторые процессы получают разные контейнеры во время выполнения вашего рабочего процесса. Это может не вызывать беспокойства, если вам нужны только «последние» контейнеры и вам не важна воспроизводимость.