无Docker的GitLab Kubernetes非特权Runner使用Paketo/CNB方案咨询
无Docker环境下GitLab CI使用Paketo Buildpacks方案
报错原因说明
你当前的执行报错是因为pack CLI默认使用Docker daemon作为构建后端,而你的CI环境既没有暴露宿主机的/var/run/docker.sock,也没有启用docker:dind服务,因此无法连接到Docker daemon导致构建失败。
最简可行方案
无需引入kpack这类复杂组件,只需要将pack的构建后端替换为rootless podman即可,rootless podman支持非特权环境运行,不需要Docker相关依赖,完全符合你的环境要求。
调整后的.gitlab-ci.yml配置
# 选用内置pack CLI和rootless podman的官方镜像,无需单独安装pack组件 image: quay.io/buildpacks/builder:latest stages: - build variables: # 配置pack使用podman套接字,不依赖Docker服务 DOCKER_HOST: unix:///run/user/1000/podman/podman.sock # 按实际需求替换为你的镜像仓库组地址 REGISTRY_GROUP_PROJECT: "你的镜像仓库地址/你的项目组路径" build-image: stage: build script: - pack --version # 登录镜像仓库,使用GitLab内置的镜像仓库凭证变量,私有仓库可自行替换参数 - podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY # 执行构建并直接推送镜像到仓库 - > pack build $REGISTRY_GROUP_PROJECT/$CI_PROJECT_NAME:latest --builder paketobuildpacks/builder:base --path . --container-builder podman --publish
必要配置说明
- 你的Kubernetes GitLab Runner需要配置任务的
securityContext.runAsUser为1000,rootless podman默认使用该UID运行,无需开启任务特权权限 - 如果需要加快构建速度,可以为Runner配置持久化卷,挂载
/home/build/.cache目录,pack会自动缓存构建层和基础镜像 - 如果构建需要拉取私有源的依赖或基础镜像,提前在podman登录配置中添加对应仓库的凭证即可
内容的提问来源于stack exchange,提问作者jonashackt
相关产品推荐
相关产品推荐

