You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Singularity复刻Docker ENTRYPOINT/CMD功能遇脚本找不到问题求助

实现Singularity等效Docker ENTRYPOINT+CMD的灵活脚本指定方案

问题背景

原有Dockerfile通过以下配置实现默认启动runscript.sh,同时允许传递参数覆盖为其他挂载脚本:

ENTRYPOINT ["sh"]
CMD ["runscript.sh"]

转写为Singularity recipe时,使用%startscript尝试实现等效逻辑:

%startscript
exec "$@"

但执行启动命令时报错脚本找不到:

singularity instance start --bind /hostpath:/containerpath model.sif instancename script.sh

错误信息:

/.singularity.d/startscript: 4: exec: script.sh: not found

硬编码路径虽能运行,但缺乏灵活性,需要支持任意指定挂载脚本的方法。

解决方案

1. 直接使用容器内绝对路径指定脚本

Singularity实例启动时默认工作目录是容器根目录/,挂载的脚本位于/containerpath下,因此直接传递容器内的绝对路径即可:

singularity instance start --bind /hostpath:/containerpath model.sif instancename /containerpath/script.sh

2. 通过--pwd参数切换工作目录

启动时指定容器内的工作目录为挂载路径,之后直接传递脚本相对路径:

singularity instance start --bind /hostpath:/containerpath --pwd /containerpath model.sif instancename script.sh

3. 修改Singularity Recipe的%startscript(适用于固定挂载路径场景)

如果挂载路径固定不变,可以在%startscript中先切换到挂载目录,再执行传入的脚本:

%startscript
cd /containerpath
exec "$@"

之后启动命令只需传递脚本名即可:

singularity instance start --bind /hostpath:/containerpath model.sif instancename script.sh

总结

最通用的方案是使用容器内绝对路径指定脚本,或者配合--pwd参数切换工作目录后使用相对路径,既保留灵活性又避免硬编码问题。

内容的提问来源于stack exchange,提问作者andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:57:08