我正在使用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-ffbd9
,docker://18.6.1
)上。
helm版本的值中定义的詹金斯插件:
Jenkins Pipeline是声明性的,它使用Pod模板,其中容器图像为docker:18-dind
,容器名称为dind
。
这是我的Jenkinsfile
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正常工作?以及哪个版本?
或
或
kubernetes:1.18.1
吗?答案 0 :(得分: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-dind
和19-dind
,如果构建实际上是在Dind内部进行的,那么它们都应该起作用。
答案 1 :(得分: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}}'