我正在运行一个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)版本运行相同的管道,并且效果很好。
任何有关如何解决此问题的帮助将不胜感激。
答案 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