Nextflow 和 Docker 的 FileNotFoundException(权限被拒绝)

FileNotFoundException (Permission denied) with Nextflow and Docker

我正在 运行 设置 Nextflow 管道,运行 将每个进程放在不同的 Docker 容器中。我 运行 这个管道在 VM 中。虽然某些进程运行良好,但其中一个进程出现错误:

java.io.FileNotFoundException: file_fastqc.zip (Permission denied)
Approxat java.base/java.io.FileOutputStream.open0(Native Method)
Approxat java.base/java.io.FileOutputStream.open(FileOutputStream.java:298)
Approxat java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:237)
Failedat java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:187)
java.iat uk.ac.babraham.FastQC.Report.HTMLReportArchive.<init>(HTMLReportArchive.java:80)
  at uk.ac.babraham.FastQC.Analysis.OfflineRunner.analysisComplete(OfflineRunner.java:178)
  at uk.ac.babraham.FastQC.Analysis.AnalysisRunner.run(AnalysisRunner.java:110)
  at java.base/java.lang.Thread.run(Thread.java:834)

我在这个过程中使用的docker容器是biocontainers/fastqc:v0.11.8dfsg-2-deb_cv1

我是 运行 nextflow as sudo 并且我尝试更改执行文件夹权限,但错误仍然存​​在。

我也尝试在 Nextflow 中使用 docker.fixOwnership = true 选项,但出现了类似的错误

cannot touch '.command.trace': Permission denied

运行 我个人电脑中的相同管道,具有相同的 Docker 容器和 Nextflow (19.10) 和 Java (11) 版本,并且运行良好。

如能提供有关如何解决此问题的任何帮助,我们将不胜感激。

对我有用的解决方案是启用 Docker 作为非根用户使用,如 Docker 文档中所述: docs.docker.com/install/linux/linux-postinstall

当您在 nextflow 中使用非 root docker 时,您需要向 docker 非 root 用户授予在工作目录内写入的权限。 我通过在这个例子中添加 beforeScript 'chmod o+rw .' 来解决这个问题:

process myproc{
  input: 
  file(infile) from ch_infile
  output:
  file("outfile.txt") into ch_outfile

  container 'centos:7'
  beforeScript 'chmod o+rw .'
  """
  # ... do something here... 
  head ${infile} > outfile.txt
  """

}

多亏了这个我解决了它:https://github.com/InformaticsMatters/pipelines/issues/22