Linux 在集群中运行singularity docker
对于sientific项目,我需要在这里使用singularity项目: 我通过运行包装器脚本来运行它:bash-dfam-tetools.shLinux 在集群中运行singularity docker,linux,bash,docker,singularity-container,Linux,Bash,Docker,Singularity Container,对于sientific项目,我需要在这里使用singularity项目: 我通过运行包装器脚本来运行它:bash-dfam-tetools.sh #!/bin/bash bash /beegfs/data/TOOLS/TETools/dfam-tetools.sh RepeatModeler -h echo "test" 然后我得到了一个新的环境: (dfam-tetools /beegfs/data/TOOLS/TETools)$ 然后我可以在docker里面运行我
#!/bin/bash
bash /beegfs/data/TOOLS/TETools/dfam-tetools.sh
RepeatModeler -h
echo "test"
然后我得到了一个新的环境:
(dfam-tetools /beegfs/data/TOOLS/TETools)$
然后我可以在docker里面运行我需要的所有软件
但问题是,如何在集群中以相同的方式运行(例如使用slurm
或SGE
?)
我尝试创建一个bash文件,例如:
testrun.sh
#!/bin/bash
bash /beegfs/data/TOOLS/TETools/dfam-tetools.sh
RepeatModeler -h
echo "test"
但我只得到输出:
/var/spool/slurmd/job2055108/slurm_script: line 3: RepeatModeler: command not found
test
是否有人已在群集中运行docker?编辑
由于需要访问不在当前目录中的另一个目录,因此应运行singularity命令,而不是dfam tetools.sh
脚本:
singularity run-B/data:/datadocker://dfam/tetools:latest RepeatModeler-h
原始接受答案:
通过查看文档和脚本dfam tetools.sh
,您应该编写:
#/bin/bash
bash/beegfs/data/TOOLS/TETools/dfam-TETools.sh——RepeatModeler-h
如果需要运行更多命令,我建议将它们写入bash文件,并按以下方式运行此文件:
#/bin/bash
bash/beegfs/data/TOOLS/TETools/dfam-TETools.sh——bash-myscript.sh
仔细阅读文档,因为它写得很好
来自chippycentra:
编辑:多亏了frodon,以下代码为我工作:
singularity运行-B//beegfs/data/user1////beegfs/data/user1/docker://dfam/tetools:latest BuildDatabase-name$Sp_name.DB-engine rmblast$ASSEMBLY
其中
/beegfs/data/user1/
是找到文件的路径好的,谢谢,但现在我面临一个新问题:由于我在docker中,软件找不到我调用的文件:我得到文件不存在
,即使我给出了完整的路径,我也不太熟悉它,我应该同时给出一个环境路径吗?dfam tetools.sh
脚本将当前目录装载为容器中的/work
。如果您的文件位于当前目录中,请在脚本myscript.sh
中写入/work/my_file
。您也可以将/work
称为$HOME
。如果文件不在当前目录下,例如/data/path1/path2/file.fat,该怎么办?然后,您必须自己运行singularity命令并提供一个绑定选项:singularity run-B/data:/datadocker://dfam/tetools:latest bash myscript.sh
如果使用docker,该命令有更多选项:docker run-it--rm--init--mount type=bind,source=$(pwd),target=/work--mount type=bind,source=/data,target=/data--user“$(id-u):$(id-g)”--workdir”/work--env“HOME=/work”dfam/tetools:latest bash myscript.sh
(显然无法测试该命令)