遠端 Bake 檔案定義

您可以直接從遠端 Git 儲存庫或 HTTPS URL 建置 Bake 檔案

$ docker buildx bake "https://github.com/docker/cli.git#v20.10.11" --print
#1 [internal] load git source https://github.com/docker/cli.git#v20.10.11
#1 0.745 e8f1871b077b64bcb4a13334b7146492773769f7       refs/tags/v20.10.11
#1 2.022 From https://github.com/docker/cli
#1 2.022  * [new tag]         v20.10.11  -> v20.10.11
#1 DONE 2.9s

這將從指定的遠端位置擷取 Bake 定義,並執行該檔案中定義的群組或目標。如果遠端 Bake 定義未指定建置上下文,則上下文會自動設定為 Git 遠端。例如,此案例

將本地上下文與遠端定義一起使用

使用遠端 Bake 定義進行建置時,您可能希望使用相對於執行 Bake 命令之目錄的本地檔案。您可以使用 cwd:// 前綴定義相對於命令上下文的上下文。

https://github.com/dvdksn/buildx/blob/bake-remote-example/docker-bake.hcl
target "default" {
  context = "cwd://"
  dockerfile-inline = <<EOT
FROM alpine
WORKDIR /src
COPY . .
RUN ls -l && stop
EOT
}
$ touch foo bar
$ docker buildx bake "https://github.com/dvdksn/buildx.git#bake-remote-example"
...
 > [4/4] RUN ls -l && stop:
#8 0.101 total 0
#8 0.102 -rw-r--r--    1 root     root             0 Jul 27 18:47 bar
#8 0.102 -rw-r--r--    1 root     root             0 Jul 27 18:47 foo
#8 0.102 /bin/sh: stop: not found

如果您想使用特定的本地目錄作為上下文,則可以在 cwd:// 前綴附加路徑。請注意,如果您確實指定了路徑,則該路徑必須位於執行命令的工作目錄中。如果您使用絕對路徑或指向工作目錄外部的相對路徑,Bake 將會擲出錯誤。

本地命名上下文

您也可以使用 cwd:// 前綴將 Bake 執行上下文中的本地目錄定義為命名上下文。

以下範例將 docs 上下文定義為 ./src/docs/content,相對於 Bake 作為命名上下文執行的目前工作目錄。

target "default" {
  contexts = {
    docs = "cwd://src/docs/content"
  }
  dockerfile = "Dockerfile"
}

相反,如果您省略 cwd:// 前綴,則路徑將會相對於建置上下文解析。

指定要使用的 Bake 定義

從遠端 Git 儲存庫載入 Bake 檔案時,如果儲存庫包含多個 Bake 檔案,您可以使用 --file-f 旗標指定要使用的 Bake 定義

docker buildx bake -f bake.hcl "https://github.com/crazy-max/buildx.git#remote-with-local"
...
#4 [2/2] RUN echo "hello world"
#4 0.270 hello world
#4 DONE 0.3s

結合本地和遠端 Bake 定義

您也可以使用 cwd:// 前綴和 -f 將遠端定義與本地定義結合使用。

假設目前工作目錄中有以下本地 Bake 定義

# local.hcl
target "default" {
  args = {
    HELLO = "foo"
  }
}

以下範例使用 -f 指定兩個 Bake 定義

docker buildx bake -f bake.hcl -f cwd://local.hcl "https://github.com/crazy-max/buildx.git#remote-with-local" --print
{
  "target": {
    "default": {
      "context": "https://github.com/crazy-max/buildx.git#remote-with-local",
      "dockerfile": "Dockerfile",
      "args": {
        "HELLO": "foo"
      },
      "target": "build",
      "output": [
        "type=cacheonly"
      ]
    }
  }
}

當您在 GitHub Actions 中使用遠端 Bake 定義進行建置,並且想要使用 metadata-action

私有儲存庫中的遠端定義

如果您想使用位於私有儲存庫中的遠端定義,您可能需要指定 Bake 在擷取定義時使用的憑證。

如果您使用預設的 SSH_AUTH_SOCK 向私有儲存庫進行驗證,則您不需要為 Bake 指定任何其他驗證參數。Bake 會自動使用您的預設代理程式 Socket。

若要使用 HTTP 權杖或自訂 SSH 代理程式進行驗證,請使用以下環境變數來設定 Bake 的驗證策略