Nextflow не извлекает «последний» образ Docker
У меня две виртуальные машины. Одна виртуальная машина используется для запуска 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 уже есть образ с именем latest, 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
для каждого порожденного процесса и, в зависимости от того, когда новые образы помещаются в ваш реестр, может означать, что некоторые процессы получают разные контейнеры во время выполнения вашего рабочего процесса. Это может не вызывать беспокойства, если вам нужны только «новейшие» контейнеры и вы не заботитесь о воспроизводимости.