仅对Nextflow中的某些流程使用Docker

zlhcx6iw  于 2023-02-03  发布在  Docker
关注(0)|答案(1)|浏览(298)

我正在Nextflow中编写一个管道,它包含多个进程,其中大多数都使用Docker。现在我试图添加一个新进程,它只包含一个python脚本来预处理一些结果-不需要Docker映像。
但是,我得到了错误Missing container image for process 'my_python_process'
我在nextflow.config中定义Docker映像,如下所示:

process {
    withName:process1 {
        container = 'some/image1:1.0'
    }
    withName:process2{
        container = 'some/image2:1.0'
    }
    withName:process3{
        container = 'some/image3:1.0'
    }
}

docker {
    enabled = true
}

我发现了一个讨论,他们建议对没有容器的流程使用container = null,但是无论流程脚本包含什么,它仍然给出相同的错误。
有人知道我错过了什么吗?谢谢!

t3psigkw

t3psigkw1#

使用docker.enabled = true,Nextflow将尝试运行使用指定映像创建的Docker容器中的每个流程。然后,当没有为特定流程指定container指令时,您会看到错误。通常的方法是为您的工作流指定一个“base”或“default”容器。您可能希望选择Python自带的容器。否则,Ubuntu在我看来是个不错的选择。
注意,withName进程选择器具有最高优先级1。

process {

    container = 'ubuntu:22.04'

    withName: my_python_process {
        container = 'python:3.9'
    }

    withName: process1 {
        container = 'some/image1:1.0'
    }
    withName: process2 {
        container = 'some/image2:1.0'
    }
    withName: process3 {
        container = 'some/image3:1.0'
    }
}

docker {
    enabled = true
}

我不知道有什么方法可以禁用Docker对特定进程的执行,但您也不会真的想这样做2.应该首选上述方法:
容器化允许您将脚本的二进制依赖项打包为可在任何支持容器运行时的平台上执行的标准和可移植格式,从而编写自包含且真正可再现的计算管道。此外,根据目标计算环境中可用的运行时,可以使用任何受支持的容器运行时透明地执行相同的管道。

相关问题