我在运行两个越南船民。一个VM用于运行nextflow,另一个VM上有一个Jenkins构建服务器。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 VM上已经有一个名为latest的图像,所以nextflow使用该映像,而不需要检查注册表。
问:我如何确保在每次运行nextflow之前,它都会检查注册表中的更新图像?或者,是否有我可以在VM上运行的脚本/程序来检查注册表(而不是nextflow)?
谢谢。
发布于 2020-12-14 14:40:32
Nextflow只是使用docker run在容器中运行命令。如果指定了尚未提取的图像,docker run将首先执行一个docker pull来下载/本地化图像。要再次检查注册表中更新的图像,只需确保在运行Nextflow之前调用docker pull (针对每个映像)。如果您希望在每次生成进程时检查注册表中更新的图像,请参见下面的内容。
经过一些研究后,看起来最新的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的开销,并且取决于何时将新图像推送到您的注册表中,这可能意味着某些进程在执行工作流期间得到不同的容器。不过,如果您只需要“最新”容器,而不关心可重现性,这可能不是问题。
https://stackoverflow.com/questions/65287446
复制相似问题