logo
37
146
WeChat Login

docker buildx 异构打包功能支持#1076

Resolved
created 2025-06-30
Edit

这个特性将解决什么问题?

我们目前在 Github 依赖 GitHubCI 的能力,在对异构的Docker镜像进行打包,例如 LoongArch64。

有计划将 Github 的 CI 迁移到CNB,但是暂时还不支持打包异构镜像。

设想的解决方案?如有

官方已有解决方案

added labels
仅讨论

现有的方案如果要开启多平台构建,需要开root模式,但开了就意味着着用户可以直接操控母机,有巨大的安全问题。所以没法开启

目前内部版本正在验证一个新的方案,通过开启containerd-snapshotter特性,实现rootless模式下支持模拟多平台构建。但开启这个特效同时需要环境docker27+, cgroup v2. 与我们现有的一些配套解决方案存在兼容性问题。可能会导致部分流水线执行失败。目前还在解决中。

大家可以关注这个issue, 获得最新的进展。

4
added labels
feature request
有道理:听劝
,removed labels
仅讨论

坐等支持 需要这个功能

Developer

mark

我觉得可以通过开启一个临时的轻量级ECS虚拟机来实现,然后可以消耗对应更多的构建时长额度

2
1
1

我觉得可以通过开启一个临时的轻量级ECS虚拟机来实现,然后可以消耗对应更多的构建时长额度

@cnb.Z49CMcbKAGA 应该是CVM [狗头],ECS是友商的产品

1
Creator

我觉得可以通过开启一个临时的轻量级ECS虚拟机来实现,然后可以消耗对应更多的构建时长额度

@cnb.Z49CMcbKAGA 欢迎购买企业版,自建机器随意接

号外: docker buildx 异构打包功能开放公测啦!

目前通过流水线中指定 runner.tags: cnb:arch:amd64:containerd-snapshotter,可以将构建指定到支持containerd-snapshotter特性的机器(ps. 未来这个标签会去掉,仅供测试,请勿在正式环境中使用)

具体使用方法可参考: https://cnb.cool/loviselu/docker-buildx-multi-platform-example

未来计划:等整个流程跑通没啥问题,后续会把平台所有机器都开启这个特性,无需大家单独指定tag

8
pinned this issue
added priority
P0
referenced ISSUE
withdrew a comment.

哈?他们就没动原来的架构,都还在bate吧?只是 runner.tags: cnb:arch:amd64:containerd-snapshotter 的时候是新的

9dcaf43b-56a9-454d-a682-7fee63f3324e.png

刚打了个包,arm64的,正常的呀

  web_trigger_one:
    - runner:
        tags: cnb:arch:amd64
      services:
        - docker
      env:
        IMAGE_TAG: ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest-linux-amd64
      stages:
        - name: docker build
          script: docker build -t ${IMAGE_TAG} .ide
        - name: docker push
          script: docker push ${IMAGE_TAG}
        - name: resolve
          type: cnb:resolve
          options:
            key: build-amd64
    - runner:
        tags: cnb:arch:arm64:v8
      services:
        - docker
      env:
        IMAGE_TAG: ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest-linux-arm64
      stages:
        - name: docker build
          script: docker build -t ${IMAGE_TAG} .ide
        - name: docker push
          script: docker push ${IMAGE_TAG}
        - name: resolve
          type: cnb:resolve
          options:
            key: build-arm64
    - services:
        - docker
      env:
        IMAGE_TAG: ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest
      stages:
        - name: await the amd64
          type: cnb:await
          options:
            key: build-amd64
        - name: await the arm64
          type: cnb:await
          options:
            key: build-arm64
        - name: manifest
          image: cnbcool/manifest
          settings:
            target: ${IMAGE_TAG}
            template: ${IMAGE_TAG}-OS-ARCH
            platforms:
              - linux/amd64
              - linux/arm64
        - name: remove tag
          type: artifact:remove-tag
          options:
            name: ${CNB_REPO_NAME}
            tags:
              - latest-linux-amd64
              - latest-linux-arm64
            type: docker

@cnb.ZM6fBONzBPA(Kane.Yu)

Assignee
(卢嘉辉)
(宁宁)
(エーコー)
Label
feature request
有道理:听劝
Priority
P0
Time period
-
Property
Add custom properties to record and label key information
Participant