ajl123
ajl123

Reputation: 1272

snakemake - configure rules to run with local container (Singularity, Docker)

For snakemakev5.27+

Is there a way to run snakemake with the container directive that points to a local image? E.g. if I store the Docker containers on Dockerhub, and I also have a copy locally, when running snakemake, I don't want the rule to pull a singularity image copy from DockerHub if there already exists the exact copy locally. Makes for faster runs.

Upvotes: 1

Views: 1517

Answers (2)

Sebastian Müller
Sebastian Müller

Reputation: 581

Even though the snakemake manual doesn't explicitly state it, it is possible to use a local singularity image using the containerized directive.

So instead of the example in the link above:

containerized: "docker://username/myworkflow:1.0.0"

You can point to the singularity sif file path (which contains the image)

containerized: "/path/to/myimage.sif"

Make sure you use --use-singularity when running snakemake.

How to build the singularity (sif) image:

You can build the sif image in various ways as described here, bug as for your question, you can build it from a local docker image.

I.e. you can list your local images by docker images and pick one to build the local sif file like so:

SINGULARITY_NOHTTPS=1 singularity build /path/to/myimage.sif docker-daemon://mydockerimage:latest

Note, it doesn't seem to work straight from local docker container, i.e. I would have expected this to work:

containerized: "docker-daemon://scpipe_docker:latest"

... but it didn't as of snakemake version 6.10.0

Upvotes: 0

Lars Bilke
Lars Bilke

Reputation: 5229

Sure, just pass a relative or absolute file path to the directive.

Upvotes: 0

Related Questions