You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在M1设备上构建适配Intel架构K8s的容器时遇执行格式错误

问题分析与解决方案

你遇到的exec ./fwatchdog: exec format error是典型的架构不匹配问题:M1 Mac是arm64架构,默认构建的镜像(包括OpenFaaS的fwatchdog进程管理器)会是arm64版本,但你的Kubernetes集群是Intel(amd64)架构,导致二进制无法执行。

解决步骤

1. 启用Docker Buildx(跨架构构建工具)

M1 Docker默认支持Buildx,但需要确认是否已启用:

docker buildx ls

如果未看到活跃的builder,执行:

docker buildx create --use

2. 修正函数配置文件(oi.yml)

调整build_args和添加platform字段,确保所有编译产物和依赖都是amd64架构:

version: 1.0
provider:
  name: openfaas
  gateway: http://127.0.0.1:8080
functions:
  oi:
    lang: go
    handler: ./oi
    image: us.gcr.io/asdf/oi:latest
    platform: linux/amd64  # 指定目标架构
    build_args:
      GO111MODULE: on
      GOOS: linux
      GOARCH: amd64
      CGO_ENABLED: 0  # 静态编译,避免依赖宿主库

3. 使用正确的构建命令

确保构建时指定目标平台,强制Docker进行跨架构构建:

faas-cli build -f oi.yml --no-cache --platform linux/amd64

额外排查点

如果上述步骤无效,检查OpenFaaS Go模板的fwatchdog是否为amd64版本:

  • 在build_args中显式指定fwatchdog的架构和版本:
    build_args:
      # ...其他参数
      FWATCHDOG_VERSION: 0.2.10
      FWATCHDOG_ARCH: amd64
    
  • 或者更新faas-cli到0.16+版本,确保对跨架构构建的支持更完善。

内容的提问来源于stack exchange,提问作者Cmag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:55:18