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

如何从本地docker save文件加载dsl.ContainerOp使用的镜像

本地导出的Docker镜像tar包在Kubeflow中的使用方法

首先明确核心逻辑:Kubeflow 依托 Kubernetes 集群运行,集群的容器运行时无法直接读取你本地电脑上通过 docker save 导出的镜像存档,你需要先将镜像导入到集群可访问的位置,再调整流水线配置即可,以下是两种可直接落地的方案:

  • 方案1:部署本地私有镜像仓库(推荐,适配多节点集群/生产环境)

    这个方案不需要依赖DockerHub等公网仓库,只要集群所有节点能访问到你部署的本地仓库即可,稳定性最高:

    1. 在集群网络可访问的机器上启动本地私有镜像仓库,直接执行Docker命令启动即可:
      docker run -d -p 5000:5000 --restart=always --name local-registry registry:2
      
    2. 将你本地的镜像tar包导入到本机Docker环境:
      docker load -i 你的镜像存档文件.tar
      
    3. 给导入后的镜像打标签,指向刚部署的本地仓库:
      # 先执行docker images查看导入后的镜像名、版本tag
      docker images
      # 打标签,格式为 <本地仓库所在机器的集群内IP>:5000/<自定义镜像名>:<版本tag>
      docker tag 原镜像名:原tag 本地仓库IP:5000/training-image:v1
      
    4. 将打好标签的镜像推送到本地私有仓库:
      docker push 本地仓库IP:5000/training-image:v1
      
    5. 配置集群所有节点的容器运行时,允许访问HTTP协议的本地仓库:如果用Docker作为运行时,在/etc/docker/daemon.json中添加配置"insecure-registries": ["本地仓库IP:5000"],重启Docker服务生效;如果用containerd则修改对应配置文件添加非安全仓库白名单。
    6. 修改Kubeflow流水线代码,直接引用本地仓库中的镜像即可:
      def my_pipeline():
          doing = dsl.ContainerOp(
              name='training',
              image='本地仓库IP:5000/training-image:v1',
              command=['hello.py'],
              output_artifact_paths= {}
          )
      
  • 方案2:单节点测试场景,直接导入镜像到集群节点(无需部署仓库)

    如果你是用minikube、kind、单节点kubeadm搭建的测试集群,不需要额外部署仓库,直接把镜像导入到节点的本地容器运行时即可:

    1. 将docker save导出的镜像tar包上传到集群所有工作节点(如果是单节点集群只需要上传到对应节点即可;如果是minikube环境,直接在本地执行minikube image load 你的镜像存档文件.tar即可完成导入,跳过后续步骤)。
    2. 根据节点使用的容器运行时执行导入命令:
      • 用Docker作为运行时:
        docker load -i 你的镜像存档文件.tar
        
      • 用containerd作为运行时(新版K8s默认):
        ctr -n=k8s.io images import 你的镜像存档文件.tar
        
    3. 修改流水线代码,配置镜像拉取策略为Never,告诉K8s不要从远程仓库拉取镜像,直接使用节点本地已存在的镜像:
      def my_pipeline():
          doing = dsl.ContainerOp(
              name='training',
              image='你导入的镜像完整名称:tag', # 和docker/ctr导入后查询到的镜像名、tag完全一致
              command=['hello.py'],
              output_artifact_paths= {}
          )
          # 关键配置:禁止远程拉取镜像
          doing.container.set_image_pull_policy('Never')
      

    注意:该方案仅适合单节点测试场景,多节点集群下需要给每一个可能调度训练Pod的节点都导入镜像,否则Pod调度到未导入镜像的节点时会启动失败。

避坑提醒

不要尝试在流水线代码中直接填写本地tar包的文件路径,Kubeflow执行任务时Pod运行在K8s集群节点上,无法访问你个人电脑本地存储的文件,该方式完全无法生效。

内容的提问来源于stack exchange,提问作者Bùi Trọng Văn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:24:11