集群节点Docker容器中Singularity的--no-home参数失效问题
解决HPC计算节点Singularity访问容器内/home的问题
问题根源
计算节点通过srun执行时,大概率是集群预设的环境变量(比如SINGULARITY_BIND)或者srun的默认挂载规则,强制绑定了本地/home,直接覆盖了你加的--no-home这类参数——毕竟登录节点没有srun的额外挂载逻辑,所以能正常访问容器内的/home。
具体解决办法
先清除环境变量再执行命令
临时删掉可能干扰的SINGULARITY_BIND变量,同时保留--no-home参数:srun env -u SINGULARITY_BIND singularity exec --no-home docker://quay.io/comparative-genomics-toolkit/cactus:v2.7.1 ls /home原理就是先去掉集群预先设置的绑定规则,让Singularity的参数生效。
用--cleanenv彻底隔离外部环境
如果上面的方法不行,直接用--cleanenv清空所有容器外的环境变量,避免任何集群配置干扰:srun singularity exec --cleanenv --no-home docker://quay.io/comparative-genomics-toolkit/cactus:v2.7.1 ls /home反向绑定验证容器内路径
要是还是有问题,可以把容器内的/home映射到一个临时路径,绕开本地/home的冲突:srun singularity exec --bind /tmp/cactus-home:/home docker://quay.io/comparative-genomics-toolkit/cactus:v2.7.1 ls /tmp/cactus-home或者直接进容器交互式查看:
srun singularity shell --no-home docker://quay.io/comparative-genomics-toolkit/cactus:v2.7.1 # 进去后直接敲 ls /home 就能看到容器内的内容了排查计算节点的Singularity环境
先在计算节点上跑srun env | grep SINGULARITY,看看有没有集群预设的Singularity相关变量,比如SINGULARITY_BIND、SINGULARITY_CONTAIN,这些都会优先于命令行参数生效,必须清除。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

