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, nextflow использует ее и не утруждает себя проверкой реестра.

Вопрос. Как я могу убедиться, что перед каждым запуском nextflow проверяет реестр на наличие более новых образов? Или есть сценарий/программа, которую я могу запустить на виртуальной машине, которая проверяет реестр (вместо nextflow)?

Спасибо.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
0
464
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме