1

我正在运行一个 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

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

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

cannot touch '.command.trace': Permission denied

在我的个人计算机上使用相同的 Docker 容器和 Nextflow (19.10) 和 Java (11) 版本运行相同的管道,并且运行良好。

任何有关如何解决此问题的帮助将不胜感激。

4

2 回答 2

0

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

于 2020-01-28T09:35:43.427 回答
0

当您在 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

于 2020-06-05T09:00:39.190 回答