Bake 中的表达式计算

HCL 格式的烘焙文件支持表达式计算,这使 执行算术运算、有条件地设置值等。

算术运算

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

docker-bake.hcl
sum = 7*6

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

打印带有标志的 Bake 文件将显示 build 参数。--printanswer

$ 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}": "",
  ]
}

在本例中,是一个空字符串,因此生成的生成配置 仅包含 hard-coded 标签。TAGmy-image:latest

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

带变量的表达式

您可以使用带有变量的表达式来有条件地设置 值或执行算术运算。

以下示例使用表达式根据 变量。如果变量为 大于 5,否则设置为 “lower”。设置 build 参数 如果变量为 true,则设置为 “yes”,否则设置为 “no”。v1FOOv2IS_FOO

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"
  }
}

打印带有标志的 Bake 文件将显示 和 build 参数。--printv1v2

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