如何在 Skaffold 配置中设置构建输出平台 x86_64?

How do I set the build output platform x86_64 in a Skaffold configuration?

由于我是在 M1 mac 上开发的,所以我的 Docker 构建将构建 ARM。我想构建 x86_64 图像,我知道我可以使用 --platform 标志构建这些图像,但我想使用我的 Skaffold 配置来构建它。

Skaffold 有 buildCommand 字段,您可以向其传递自定义脚本。
所以,例如

...
build:
  artifacts:
  - image: "foo"
    context: .
    custom:
      buildCommand: ./build.sh
...

build.sh

docker buildx build \
  --platform linux/amd64
  ... # any other flags

免责声明:以下所有内容均为猜测。我目前无法对此进行测试,但我相信如果我错了,有人会纠正我。

还有 build.artifacts.docker 字段(目前处于测试阶段)。可以使用此字段将参数传递给 Docker build.

...
build:
  artifacts:
  - image: "foo"
    context: .
    docker:
      dockerfile: <Dockerfile relative to workspace>
      target: <Dockerfile target name to build>
      buildArgs:
        platform: linux/amd64
  local:
    useDockerCLI: true #this is needed to use docker build CLI rather than Docker Engine API

可能还需要将 buildx 设置为 Docker 的默认生成器。这可以通过

来实现
docker buildx install

感谢@p10l 让我走上了正确的轨道,我才能够弄明白。 Skaffold 无法使用 Docker Engine API 设置平台,所以我们需要通过将 useDockerCLI 设置为 true 并添加来将 --platform=linux/x86_64 传递给命令行cliFlags 到我们的 Docker 配置。

apiVersion: skaffold/v2beta26
kind: Config
build:
  # ... other unrelated config ...
  artifacts:
    - image: my-image
      context: ./
      docker:
        cliFlags:
          - --platform=linux/x86_64 
  local:
    useDockerCLI: true # the only way to set platform is with cliFlags so we need to enable the Docker CLI