FileNotFoundException (в разрешении отказано) с Nextflow и Docker
Я запускаю конвейер 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)
Контейнер докера, который я использую в этом процессе, - это biocontainers/fastqc:v0.11.8dfsg-2-deb_cv1
Я запускаю nextflow как sudo и попытался изменить разрешения папки выполнения, но ошибка не исчезла.
Я также пытался использовать параметр docker.fixOwnership = true в Nextflow, и появляется аналогичная ошибка
cannot touch '.command.trace': Permission denied
Запуск того же конвейера на моем персональном компьютере с тем же контейнером Docker и версиями Nextflow (19.10) и Java (11), и он отлично работает.
Любая помощь в решении этой проблемы будет очень признательна.
2 ответа
Решение, которое сработало для меня, заключалось в том, чтобы включить использование Docker в качестве пользователя без полномочий root, как описано в документации Docker: http://docs.docker.com/install/linux/linux-postinstall
Когда вы используете докер без полномочий root в следующем потоке, вам необходимо предоставить разрешения на запись внутри рабочего каталога для пользователя докера без полномочий 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