来自Snakemake的Docker容器的权限被拒绝的错误 [英] Permission denied error from Docker container in Snakemake

查看:87
本文介绍了来自Snakemake的Docker容器的权限被拒绝的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我以前已经从此 Dockerfile 构建了一个Docker容器,并且运行良好:

I had built a Docker container from this Dockerfile previously and it worked fine:

FROM perl:5.32

MAINTAINER Matthew Jordan Oldach, moldach686@gmail.com

WORKDIR /usr/local/bin

# Install cpan modules
RUN cpanm install --force Cwd Getopt::Long POSIX File::Basename List::Util Bio::DB::Fasta Bio::Seq Bio::SeqUtils Bio::SeqIO Set::IntervalTree Set::IntSpan

RUN apt-get install tar

# Download CooVar-v0.07
RUN wget http://genome.sfu.ca/projects/coovar/CooVar-0.07.tar.gz
RUN tar xvf CooVar-0.07.tar.gz
RUN cd coovar-0.07; chmod +x scripts/* coovar.pl

# Set WORKDIR to /data -- predefined mount location.
RUN mkdir /data
WORKDIR /data

# Set Entrypoint
ENTRYPOINT ["perl", "/usr/local/bin/coovar-0.07/coovar.pl"]

唯一的问题是,我发现存储库中的内容与服务器上的 coovar-0.07 之间存在细微的差异( extract-cdna.pl 脚本).

The only issue was that I found there was a slight difference between what is on the repo and the coovar-0.07 which is on our server (there was slight difference in the extract-cdna.pl script).

为了重现我们的管道,我需要本地将 COPY CooVar 放入容器(而不是 wget ).

In order to reproduce our pipeline I'll need to COPY CooVar locally into the container (rather than wget).

因此,我尝试了以下 Dockerfile :

FROM perl:5.32

MAINTAINER Matthew Jordan Oldach, moldach686@gmail.com

WORKDIR /usr/local/bin

# Install cpan modules
RUN cpanm install --force Cwd Getopt::Long POSIX File::Basename List::Util Bio::DB::Fasta Bio::Seq Bio::SeqUtils Bio::SeqIO Set::IntervalTree Set::IntSpan

# Download CooVar-v0.07
COPY coovar-0.07 /usr/local/bin/coovar-0.07
RUN cd coovar-0.07; chmod +x scripts/* coovar.pl

# Set WORKDIR to /data -- predefined mount location.
RUN mkdir /data
WORKDIR /data

# Set Entrypoint
ENTRYPOINT ["perl", "/usr/local/bin/coovar-0.07/coovar.pl"]

看来我可以从Docker运行主脚本( coovar.pl )(无 Permission Denied 错误):

It appears I could run the main script (coovar.pl) from Docker (no Permission Denied error):

# pull the container
$ sudo docker pull moldach686/coovar-v0.07:latest

# force entry point of `moldach686/coovar-v0.07` to /bin/bash
## in order to investigate file system
$ sudo docker run -it --entrypoint /bin/bash moldach686/coovar-v0.07

root@c7459dbe216a:/data# perl /usr/local/bin/coovar-0.07/coovar.pl 
USAGE: ./coovar.pl -e EXONS_GFF -r REFERENCE_FASTA (-t GVS_TAB_FORMAT | -v GVS_VCF_FORMAT) [-o OUTPUT_DIRECTORY] [--circos] [--feature_source] [--feature_type]
Program parameter details provided in file README.

但是,当我尝试将其合并到我的 Snakemake 工作流程中时,出现以下权限被拒绝错误:

However, when I tried to incorporate this into my Snakemake workflow I get the following Permission Denied error:

Workflow defines that rule get_vep_cache is eligible for caching between workflows (use the --cache argument to enable this).
Building DAG of jobs...
Using shell: /cvmfs/soft.computecanada.ca/nix/var/nix/profiles/16.09/bin/bash
Provided cores: 1 (use --cores to define parallelism)
Rules claiming more threads will be scaled down.
Job counts:
        count   jobs
        1       coovar
        1
[Tue Nov  3 21:56:51 2020]
rule coovar:
    input: variant_calling/varscan/MTG470.vcf, refs/c_elegans.PRJNA13758.WS265.genomic.fa
    output: annotation/coovar/varscan/MTG470/categorized-gvs.gvf, annotation/coovar/varscan/MTG470.annotated.vcf, annotation/coovar/varscan/filtration/MTG470_keep.tsv, annotation/coovar/varscan/filtration/MTG470_exclude.tsv
    jobid: 0
    wildcards: sample=MTG470
    resources: mem=4000, time=10
Activating singularity image /scratch/moldach/COOVAR/cbc22e3a26af1c31fb0e4fcae240baf8.simg
Can't open perl script "/usr/local/bin/coovar-0.07/coovar.pl": Permission denied

推荐答案

我发现可以使用的解决方案是将以下行添加到 Dockerfile :

The solution I found to work was adding the following line to the Dockerfile:

RUN echo "user ALL=NOPASSWD: ALL" >> /etc/sudoers

这会将 user 添加到赋予权限的 sudoers 文件中:

This adds the user to the sudoers file giving permissions:

FROM perl:5.32

MAINTAINER Matthew Jordan Oldach, moldach686@gmail.com

USER root
WORKDIR /usr/local/bin

# Install cpan modules
RUN cpanm install --force Cwd Getopt::Long POSIX File::Basename List::Util Bio::DB::Fasta Bio::Seq Bio::SeqUtils Bio::SeqIO Set::IntervalTree Set::IntSpan
RUN echo "user ALL=NOPASSWD: ALL" >> /etc/sudoers

# Download CooVar-v0.07
COPY coovar-0.07 /usr/local/bin/coovar-0.07
RUN cd coovar-0.07; chmod a+rwx scripts/* coovar.pl
# Download Bedtools 2.27.1
ENV VERSION 2.27.1
ENV NAME bedtools2
ENV URL "https://github.com/arq5x/bedtools2/releases/download/v${VERSION}/bedtools-${VERSION}.tar.gz"
WORKDIR /tmp
RUN wget -q -O - $URL | tar -zxv && \
cd ${NAME} && \
make -j 4 && \
cd .. && \
cp ./${NAME}/bin/bedtools /usr/local/bin/ && \
strip /usr/local/bin/*; true && \
rm -rf ./${NAME}/


# Set WORKDIR to /data -- predefined mount location.
RUN mkdir /data
WORKDIR /data

# Set Entrypoint
ENTRYPOINT ["perl", "/usr/local/bin/coovar-0.07/coovar.pl"]

这篇关于来自Snakemake的Docker容器的权限被拒绝的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆