【问题标题】:How to generate the output directory for a Nextflow process within the docker container?如何在 docker 容器中为 Nextflow 进程生成输出目录?
【发布时间】:2021-01-15 08:21:36
【问题描述】:

我在 nextflow 脚本中运行两个进程(如下所示)。第一个过程输出一些绘图,第二个过程必须包含这些绘图以生成 pdf 文件。这两个进程都在 docker 容器 (docimage:1.0.0) 中运行。当我运行这个 nextflow 脚本时,第一个进程运行良好,但第二个进程没有完成,因为乳胶文件找不到绘图,因为包含绘图的输出目录不是在 docker 容器内创建的。然而,包含绘图的输出目录是在运行 nextflow 脚本的本地目录中生成的。 有人可以建议如何从 docker 容器内的第一个进程生成输出目录,以便乳胶文件可以包含 docker 容器内的图吗?谢谢!

process run_pr {

echo true
container 'docimage:1.0.0'

publishDir "${params.outDir}", mode: 'copy'

output:
file '*' into output_ch

script:
"""
Rscript /home/project/scripts/run.R -s "$params.inputDir" -i "$params.inputFile"
"""
}



process latexGen {

echo true
container 'docimage:1.0.0'

input:
file '*' from output_ch

output:
publishDir "${params.outDir}", mode: 'copy'
    
script:
"""
pdflatex -output-directory=/home/project/$params.outDir  /home/project/scripts/doc.tex
"""
}

【问题讨论】:

    标签: docker nextflow


    【解决方案1】:

    最好避免在管道进程中使用引用文件的绝对路径。您需要确保输入文件正确本地化。这可能有助于您入门:

    inputFile = file(params.inputFile)
    inputDir = file(params.inputDir)
    
    tex = file('/home/project/scripts/doc.tex')
    
    process run_pr {
    
        container 'docimage:1.0.0'
    
        publishDir "${params.outDir}/run_pr", mode: 'copy'
    
        input:
        file inputFile
        file inputDir
    
        output:
        file '*' into output_ch // avoid using loose wildcards when specifying outputs
    
        script:
        """
        run.R -s "${inputDir}" -i "${inputFile}"
        """
    }
    
    process latexGen {
    
        container 'docimage:1.0.0'
    
        publishDir "${params.outDir}/latexGen", mode: 'copy'
    
        input:
        file 'pdf/*' from output_ch
        file tex
    
        output:
        file "pdf/doc.pdf"
        
        script:
        """
        pdflatex -output-directory pdf doc.tex
        """
    }
    

    我对乳胶的经验有限。我并不完全清楚 -output-directory 选项的工作原理:

    -output-directory directory
        Write output files in directory instead of the current directory.
        Look up input files in directory first, the along the normal search path.
    

    如果您的输出目录用于输出 PDF,您可以忽略该选项。如果它被用于“查找”输入文件,那么您显然需要保留它。

    您的流程“run_pr”做什么以及它的输出是什么也不完全清楚。它是只写一个文件还是产生多个文件?如果您可以通过一些示例输入进行澄清,那就太好了。

    【讨论】:

    • 抱歉,您的帖子评论晚了。感谢您的建议和指导。我将相应地修改配置文件和 main.nf 文件。此外,考虑到时间限制,我实施了一个临时解决方案,其中我将两个流程合并为一个流程。根据需要生成输出。干杯!
    猜你喜欢
    • 2021-11-16
    • 2017-03-25
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多