【问题标题】:docker buildkit not supported by daemon in AWS EKS kubernetes clusterAWS EKS kubernetes 集群中的守护进程不支持 docker buildkit
【发布时间】:2020-01-10 19:58:16
【问题描述】:

我正在使用 Build Toolkit 为每个微服务构建 docker 镜像。

./build.sh

export DOCKER_BUILDKIT=1
# ....
docker build -t ....
# ... 

这适用于我的带有 docker (18.09.2) 的机器。

但是,它不适用于 Jenkins,我设置如下:

  • EKS 配备了 Terraform 模块

    module "eks" {
      source   = "terraform-aws-modules/eks/aws"
      version  = "5.0.0"
      # ....
    }
    
  • Jenkins 通过Helm Chart 部署在 EKS(v1.12.10-eks-ffbd9docker://18.6.1)上。

  • helm release 中定义的 Jenkins 插件:

    • kubernetes:1.18.1
    • 工作流作业:2.33
    • 工作流聚合器:2.6
    • 凭据绑定:1.19
    • git:3.11.0
    • blueocean:1.19.0
    • bitbucket-oauth:0.9
  • Jenkins Pipeline 是声明式的,它使用容器镜像为docker:18-dind,容器名称为dind 的Pod 模板。

  • 这是我的 Jenkins 文件

    pipeline {
      agent {
        kubernetes {
          defaultContainer 'jnlp'
          yamlFile 'jenkins-pod.yaml'
        }
      }
      stages {
        stage('Build Backends') {
          steps {
            container('dind') {
              sh 'chmod +x *sh'
              sh './build.sh -t=dev'
            }
            containerLog 'dind'
          }
        }
      }
    

    }

当 Jenkins 执行这个管道时,它会显示这个错误:

buildkit not supported by daemon

我不确定我应该升级哪些软件才能使 docker-buildkit 正常工作?和哪个版本?

  • 现在是 5.0.0 的 Terraform eks 模块?

或者

  • docker:18-dind 图像,其行为类似于临时 Jenkins 奴隶的环境?

或者

  • Jenkins 插件kubernetes:1.18.1 ?

【问题讨论】:

  • 你能在你的./build.sh 中试试DOCKER_BUILDKIT=1 docker build -t .... 吗?

标签: docker jenkins kubernetes terraform docker-buildkit


【解决方案1】:

根据docker-ce sources启动buildkit会话,成功检查isSessionSupported有两个要求:

  • dockerCli.ServerInfo().HasExperimental
  • versions.GreaterThanOrEqualTo(dockerCli.Client().ClientVersion(), "1.31"

所以:

  • 检查您的 docker-cli 库的版本
  • 并且启用了HasExperimental 选项。

要检查它是否有实验支持,你可以从 shell 运行:

docker version -f '{{.Server.Experimental}}'

【讨论】:

    【解决方案2】:

    Docker buildkit 支持在 18.09 中是实验性的,因此您可能需要在 EKS 中升级 docker:

    EKS (v1.12.10-eks-ffbd9 , docker://18.6.1

    或者您可能有一个旧的 dind 图像(18-dind 应该足够新,但指向 18.06 或 18.03 的该标记的旧版本不会)。您可以尝试 18.09-dind19-dind 如果构建实际上发生在 dind 内部,它们应该都可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2022-07-21
      • 1970-01-01
      • 2021-07-08
      相关资源
      最近更新 更多