Nextflow 不拉取 "latest" Docker 图片

Nextflow Does Not Pull "latest" Docker Image

我运行正在使用两个虚拟机。一个 VM 用于 运行ning 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 仍在使用旧图像。经过一些研究 (),我意识到这与我使用 latest 标签这一事实有关,并且由于 nextflow VM 上已经有一个名为 latest 的图像,nextflow 使用它一个并且不费心检查注册表。

问题:如何确保在 nextflow 的每个 运行 之前,它都会检查注册表中是否有更新的图像?或者,是否有一个 script/program 我可以在检查注册表(而不是 nextflow)的 VM 上 运行?

谢谢。

Nextflow 使用 docker run 在容器中运行您的命令。如果您指定了一张尚未拉取的图像,docker run 将首先对图像执行 docker pull 到 download/localize。要再次检查注册表以获取更新的图像,您只需要确保在 运行 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 的开销,并且根据将新图像推送到您的注册表的时间,可能意味着某些进程在您的工作流执行期间获得不同的容器。如果您只需要 'latest' 容器而不关心再现性,这可能不是问题。