让我们有一个简单的蛇文件,例如
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文件中配置卷?
答案 0 :(得分:1)
当您运行snakemake并告诉它使用奇异性图像时,请执行以下操作:
snakemake --use-singularity
您还可以将其他参数传递给奇异性,包括绑定点,如下所示:
snakemake --use-singularity -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}"
运行此蛇文件时,将raw/
绑定到inside/container/input/
,然后将plots/
绑定到inside/container/output/
。 Snakemake会在本地计算机上查找输入/输出文件,但会向容器提供命令以使用内部容器路径运行,并且一切都会很棒。
TL; DR:输入和输出中的本地路径,params和shell中的容器路径。在命令行调用中绑定本地和容器路径。