运行 Nextflow 使用容器时找不到 ./bin 脚本

Cannot find ./bin scripts when running Nextflow with a container

我有一个 nextflow 脚本,它的源脚本位于我调用 nextflow 脚本的 ./bin 目录中。当我 运行 没有容器的工作流时,Nextflow 可以找到这些脚本并执行它们。但是,当我 运行 Nextflow 使用容器时,找不到脚本,尽管我尝试将这些脚本添加到容器文件中。

我想我要么没有将可执行文件正确添加到容器中,要么我没有在 Nextflow 脚本或配置文件中正确引用它们。感谢任何帮助。

这是一个示例过程:

process clean {
  // Remove common contaminants from fastq(s) using tapioca script
  // see: https://github.com/ncgr/tapioca

  input:
    path fastq_file from fastq_raw
    val x from machine_name

  output:
      path 'out.fastq' into clean_out
      stdout ch1                        

  script:
  """
  echo "Number of reads in $fastq_file"
  grep -c "^@" $fastq_file

  tap_contam_analysis --db ${dbdir}/phix174 --pct 80 ${fastq_file} > hits.txt
  echo "PhiX filtering completed for ${fastq_file}"
  """
}

请注意,“tap_contam_analysis”脚本是位于 ./bin 中的 perl 脚本,我从中调用 Nextflow 脚本。

这是我的 Docker 文件的相关部分。请注意,我试图修改 $PATH 以希望能够解决问题......运气不好:

FROM ubuntu:18.04

ARG DEBIAN_FRONTEND=noninteractive

WORKDIR /usr/src

#Copy all the stuff for this Nextflow workflow (python and perl scripts)
COPY . .
ENV PATH=${PATH}:/usr/src/bin

最后,这是我的 nextflow.config 文件:

process {    
    container = 'nf_se_demux_to_bam_bai_denovo'
}

只需将可执行文件添加到容器 $PATH 中的某个位置即可。人们通常喜欢为此使用 /usr/local/bin,但您可以使用以下方法检查其他位置:

docker run --rm ubuntu:18.04 bash -c 'echo $PATH'

因此,您的 Dockerfile 可能如下所示:

FROM ubuntu:18.04

ARG DEBIAN_FRONTEND=noninteractive

WORKDIR /usr/src

COPY ./bin /usr/local/bin