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

时间:2020-01-17 17:05:27

标签: docker permissions nextflow

我正在运行一个Nextflow管道,该管道在不同的Docker容器中运行每个进程。我在虚拟机中运行此管道。尽管某些过程可以正常运行,但其中一个过程却出现错误:

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)版本运行相同的管道,并且效果很好。

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

2 个答案:

答案 0 :(得分:0)

对我有用的解决方案是按照Docker文档中的说明启用Docker作为非root用户的使用: docs.docker.com/install/linux/linux-postinstall

答案 1 :(得分:0)

在nextflow中使用非root用户的docker时,您需要向docker non-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