Пример Snakemake + Docker, как использовать тома - PullRequest
0 голосов
/ 10 октября 2018

Позволяет получить простой змеиный файл, такой как

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

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

Я хочу обобщить правило построения, чтобы его можно было запускать в док-контейнере, примерно так:

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 запускается внутри док-контейнера, где входные csv-файлы не могут быть найдены без некоторой конфигурации тома контейнера.

Можете ли вы предоставить небольшую рабочуюпример, описывающий, как тома можно настроить в Snakefile или других файлах Snakemake?

1 Ответ

0 голосов
/ 24 апреля 2019

Когда вы запускаете 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: локальные пути на входе и выходе, пути контейнера в параметрах и оболочке.Свяжите локальные и контейнерные пути в вызове командной строки.

...