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

GitLab CI中如何无需推送镜像到仓库实现Job间镜像传递?

可行,这几种方案能实现

1. 导出镜像为tar包,通过CI工件传递

  • job1构建镜像后,用docker save把镜像导出成tar文件:
    docker build -t my-app-image .
    docker save -o my-app-image.tar my-app-image
    
  • 在CI配置里把这个tar文件设为工件(artifacts),让后续job能自动下载
  • 后续job中用docker load导入镜像就能直接用:
    docker load -i my-app-image.tar
    # 比如直接运行容器:docker run my-app-image
    

2. 复用同runner的本地Docker镜像(仅限固定runner场景)

如果所有job都跑在同一个CI runner上,不用额外操作:

  • job1构建的镜像会存在runner本地的Docker daemon里
  • 后续job只要在这个runner上执行,就能直接调用该镜像
  • 注意:如果是动态生成的runner(比如K8s Pod runner),这种方法不生效

3. 利用CI自带的镜像层缓存(部分CI支持)

像GitLab CI、GitHub Actions这类工具,支持直接缓存Docker镜像层:

  • job1构建时配置缓存规则,把镜像层缓存起来
  • 后续job构建时会复用已缓存的层,相当于跳过重复构建步骤,达到类似复用镜像的效果

注意事项

  • 用tar包传递会占用存储和传输时间,镜像越大影响越明显,要留意CI系统的工件大小限制
  • 共享runner场景下,不要依赖方式2,因为runner可能被重置或分配给其他任务
  • 确保CI job有足够权限操作Docker daemon,部分环境需要额外配置权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:37:05