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

在Kubernetes中运行自托管GitHub Runner时构建Docker镜像的方案咨询

在Kubernetes中构建Docker镜像的替代方案(无需挂载docker.sock)

下面是几种无需依赖宿主Docker daemon(即不用挂载/var/run/docker.sock)的Docker镜像构建与推送方案,适合在Kubernetes上的自托管GitHub Runner中使用:

1. 使用Kaniko构建镜像

Kaniko是Google开发的无daemon镜像构建工具,直接读取Dockerfile和上下文,生成OCI镜像并推送到仓库。

  • 部署方式:在GitHub Runner的Pod中引入Kaniko镜像(或在Runner容器内安装Kaniko二进制文件)
  • 核心命令:
    kaniko --dockerfile=./Dockerfile \
           --context=./ \
           --destination=your-registry/your-image:tag \
           --docker-config=/path/to/docker/config.json
    
  • 关键配置:将存储镜像仓库认证信息的config.json(可从Kubernetes Secret挂载)指定给Kaniko,确保具备推送权限。

2. 使用BuildKit + Buildx构建

BuildKit是Docker官方的下一代构建引擎,支持脱离Docker daemon运行,通过buildx命令可以配置使用容器化的BuildKit实例。

  • 操作步骤:
    1. 在Runner容器中安装Docker CLI和buildx插件
    2. 初始化容器化BuildKit实例:
      docker buildx create --use --name builder
      
    3. 构建并推送镜像:
      docker buildx build --platform linux/amd64 \
                         --push \
                         -t your-registry/your-image:tag \
                         ./
      
  • 权限配置:同样需要挂载包含仓库认证的config.json到Runner容器的/root/.docker/目录。

3. 使用Buildah构建镜像

Buildah是RedHat主导的无daemon镜像构建工具,与Podman生态兼容,语法接近Docker CLI。

  • 核心命令:
    # 构建镜像
    buildah bud -t your-registry/your-image:tag ./
    # 推送镜像
    buildah push your-registry/your-image:tag
    
  • 配置要点:通过挂载/root/.buildah/目录的认证文件,或直接设置环境变量传递仓库凭据,确保推送权限。

4. 借助Kubernetes原生CI/CD组件(如Tekton Pipelines)

如果希望将构建逻辑完全从GitHub Runner剥离,可以使用Tekton这类K8s原生的CI/CD框架:

  • 流程:GitHub Runner仅负责触发Tekton PipelineRun,由Tekton的TaskPod完成镜像构建与推送
  • 优势:构建任务完全由Kubernetes调度,无需在Runner中安装任何构建工具,权限管理更贴合K8s原生机制(如使用ServiceAccount绑定镜像仓库拉取/推送权限)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:33:23