Bake 中的表达式求值

HCL 格式的 Bake 文件支持表达式求值,这使您可以执行算术运算、有条件地设置值等等。

算术运算

您可以在表达式中执行算术运算。以下示例显示如何将两个数字相乘。

docker-bake.hcl
sum = 7*6

target "default" {
  args = {
    answer = sum
  }
}

使用--print标志打印 Bake 文件将显示answer构建参数的计算值。

$ docker buildx bake --print app
{
  "target": {
    "default": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "args": {
        "answer": "42"
      }
    }
  }
}

三元运算符

您可以使用三元运算符有条件地注册值。

以下示例仅在变量不为空时添加标签,使用内置的notequal 函数

docker-bake.hcl
variable "TAG" {}

target "default" {
  context="."
  dockerfile="Dockerfile"
  tags = [
    "my-image:latest",
    notequal("",TAG) ? "my-image:${TAG}": "",
  ]
}

在这种情况下,TAG是一个空字符串,因此生成的构建配置仅包含硬编码的my-image:latest标签。

$ docker buildx bake --print
{
  "group": {
    "default": {
      "targets": ["default"]
    }
  },
  "target": {
    "webapp": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "tags": ["my-image:latest"]
    }
  }
}

包含变量的表达式

您可以将表达式与变量一起使用,以有条件地设置值或执行算术运算。

以下示例使用表达式根据变量的值设置值。如果变量FOO大于 5,则v1构建参数设置为“higher”,否则设置为“lower”。如果IS_FOO变量为真,则v2构建参数设置为“yes”,否则设置为“no”。

docker-bake.hcl
variable "FOO" {
  default = 3
}

variable "IS_FOO" {
  default = true
}

target "app" {
  args = {
    v1 = FOO > 5 ? "higher" : "lower"
    v2 = IS_FOO ? "yes" : "no"
  }
}

使用--print标志打印 Bake 文件将显示v1v2构建参数的计算值。

$ docker buildx bake --print app
{
  "group": {
    "default": {
      "targets": ["app"]
    }
  },
  "target": {
    "app": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "args": {
        "v1": "lower",
        "v2": "yes"
      }
    }
  }
}