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

如何在Kubeflow Pipelines的kfp.dsl.ContainerOp中运行多个脚本

结论

你当前写的command配置方式无法实现需求,你传递的python /home/jovyan/test.py会被识别为deploy.sh的入参,而非独立执行的命令。该需求可以实现,以下是两种常用的正确配置方案:


方案1:直接通过bash -c拼接多命令

直接在command参数中用bash -c把两个命令按执行顺序拼接,适合命令逻辑简单的场景:

def test_container_op():
    input_path = '/home/jovyan/'
    return dsl.ContainerOp(
        name='test container',
        image="<image name>",
        command=[
             '/bin/bash',
             '-c',
             # 用&&连接代表前一个命令执行成功才会执行后一个,换成;则不管前一个命令是否成功都执行后一个
             'chmod +x /home/jovyan/deploy.sh && /home/jovyan/deploy.sh && python /home/jovyan/test.py'
        ],
        file_outputs={
            'modeule-logs' : input_path + 'output.log' 
        }
    )

注意:如果构建镜像时已经给deploy.sh加了可执行权限,可以去掉开头的chmod +x命令。


方案2:封装统一启动脚本

如果后续还要加更多执行逻辑,建议在自定义镜像里封装一个单独的启动脚本,比如start.sh,内容如下:

#!/bin/bash
chmod +x /home/jovyan/deploy.sh
# 先执行部署脚本
/home/jovyan/deploy.sh
# 再执行Python脚本
python /home/jovyan/test.py

之后将启动脚本的执行逻辑配置到command即可:

command=[
    '/bin/bash', '/home/jovyan/start.sh'
]

这种方式的可读性和可维护性更高,适合复杂的命令流场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:57:03