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
我正在 运行 设置 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