Apptainer build中对应Docker build context的等价参数是什么?
Docker转Apptainer构建上下文问题
问题描述
我正在将一套使用Docker的Python代码适配为Apptainer(因为工作的HPC系统仅支持后者)。原代码生成的Docker命令格式如下:
docker build --build-arg PYTHON_VERSION={version} {extra} -t {IMAGE_NAME} -f {dockerfile} {CONTAINER_MAIN.parent}
其中{version}、{extra}、{IMAGE_NAME}、{dockerfile}和{CONTAINER_MAIN.parent}在代码其他部分定义,{extra}为空或以"--build-arg"开头的字符串。
我已经理清了部分对应关系:
- Apptainer同样有
--build-arg选项,功能一致,该部分可保留; docker build的-t选项用于设置镜像名称,对应apptainer build的第一个位置参数;docker build的-f选项指定Dockerfile,对应apptainer build的第二个位置参数,但可能需按官方文档将Dockerfile转换为Apptainer定义文件;docker build的位置参数为构建上下文路径,用于指定构建过程可查找文件的位置。
现在不清楚Apptainer build中对应的构建上下文参数是什么,该如何为其指定构建过程可查找文件的上下文?
解答
在Apptainer build中,构建上下文的处理逻辑和Docker不同,不需要单独的位置参数来指定,具体方式如下:
- 默认上下文:如果使用
%files、%copy等指令复制本地文件,默认上下文是执行apptainer build命令时的当前工作目录。 - 指定自定义上下文:
- 直接切换到目标上下文目录(即原来的
{CONTAINER_MAIN.parent})后执行构建命令; - 在Apptainer定义文件的复制类指令中,使用目标上下文的绝对路径来引用文件;
- 通过
--build-arg传递上下文路径变量,在定义文件中引用该变量来定位文件。
- 直接切换到目标上下文目录(即原来的
针对你提供的Docker命令,对应的Apptainer命令格式可调整为:
apptainer build {IMAGE_NAME} {dockerfile} --build-arg PYTHON_VERSION={version} {extra}
注意事项:
- 若原
{dockerfile}是原生Dockerfile,需先转换为Apptainer定义文件,可使用apptainer docker2singularity工具自动转换,或手动调整语法适配Apptainer指令; - 若要沿用原
{CONTAINER_MAIN.parent}作为上下文,可在执行构建命令前先执行cd {CONTAINER_MAIN.parent},确保复制指令的相对路径能正确找到文件。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

