docker - Snakemake + docker 示例,如何使用卷

标签 docker snakemake singularity-container

让我们有一个简单的蛇文件,如

rule targets:
    input:
        "plots/dataset1.pdf",
        "plots/dataset2.pdf"

rule plot:
    input:
        "raw/{dataset}.csv"
    output:
        "plots/{dataset}.pdf"
    shell:
        "somecommand {input} {output}"

我想概括绘图规则,以便它可以在 docker 容器中运行,类似于
rule targets:
    input:
        "plots/dataset1.pdf",
        "plots/dataset2.pdf"

rule plot:
    input:
        "raw/{dataset}.csv"
    output:
        "plots/{dataset}.pdf"
    singularity:
        "docker://joseespinosa/docker-r-ggplot2"
    shell:
        "somecommand {input} {output}"

如果我理解得很好,当我运行 snakemake --use-singularity我得到了somecommand在 docker 容器内运行,如果没有容器的一些卷配置,则无法找到输入 csv 文件。

您能否提供一个小的工作示例来描述如何在 Snakefile 或其他 Snakemake 文件中配置卷?

最佳答案

当你运行 snakemake 并告诉它使用奇点图像时,你可以这样做:
snakemake --use-singularity
您还可以将其他参数传递给奇异性,包括绑定(bind)点,如下所示:
snakemake --use-singularity --singularity-args "-B /path/outside/container/:/path/inside/container/"
现在,如果您的 csv 文件位于 /path/outside/container/ ,可以通过某些命令毫无问题地看到。

请记住,如果您的内部路径和外部路径不相同,则需要在您的蛇形规则中的不同部分使用这两条路径。这就是我的做法:

rule targets:
    input:
        "plots/dataset1.pdf",
        "plots/dataset2.pdf"

rule plot:
    input:
        "raw/{dataset}.csv"
    output:
        "plots/{dataset}.pdf"
    params:
        i = "inside/container/input/{dataset}.csv",
        o = "inside/container/output/{dataset}.pdf"
    singularity:
        "docker://joseespinosa/docker-r-ggplot2"
    shell:
        "somecommand {params.i} {params.o}"

当你运行这个蛇文件时,绑定(bind) raw/inside/container/input/ , 并绑定(bind) plots/inside/container/output/ . Snakemake 将在您的本地机器上查找输入/输出文件,但会给容器命令以使用容器内部路径运行,一切都会很棒。

TL;DR:输入和输出中的本地路径,参数和外壳中的容器路径。在命令行调用中绑定(bind)本地和容器路径。

关于docker - Snakemake + docker 示例,如何使用卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52742698/

相关文章:

Docker.IO 文件系统一致性

python - 通过 lambda + Pandas 数据框定义 Snakemake 输入规则

docker - 从本地私有(private) docker 注册表创建 Singularity 容器

docker - 如何使用 docker 容器名称而不是 IP 与 knex 进行数据库连接

docker - 构建Docker镜像时无法操作文件和目录

docker - 如何使用 REST API 设置 Docker 容器的名称

snakemake --use-conda 与一个已经创建的环境

python - 使用 Snakemake 的分组样本每组单个输出文件

python - 奇点容器里从来没有Python吗?

python-3.x - 如何在 visual studio 代码中的奇点/docker 图像中使用 python 解释器