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

Другие вопросы по тегам