代码之家  ›  专栏  ›  技术社区  ›  Sanjeev

在AKS上部署python docker映像会出现“exec/usr/bin/sh:exec格式错误”

  •  1
  • Sanjeev  · 技术社区  · 1 年前

    我正在尝试将一个带有python应用程序的docker容器部署到Azure Kubernetes服务。在部署并查看新pod上的日志后,我看到了以下错误:

    exec/usr/bin/sh:exec格式错误

    我使用以下docker buildx命令在mac上构建容器:

    docker buildx build --platform linux/x86_64 -t <my username>/ingest .  
    

    我的Docker文件有以下头

    FROM --platform=linux/x86_64 python:3.11
    

    我的部署yaml如下所示,并且似乎可以很好地绘制图像。(我只是使用了azure文档中的一些内容作为模板。)

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ingest
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          bb: ingest
      template:
        metadata:
          labels:
            bb: ingest
        spec:
          containers:
          - name: ingest
            image: <my username>/ingest:0.0.1
            imagePullPolicy: Always
    

    当我在本地检查图像时,我看到

    "Architecture": "amd64",
    "Os": "linux",
    

    我假设默认的芯片体系结构是x86_64,但不确定。我还用默认的芯片架构和操作系统构建了图像,并在本地进行了测试——它运行良好。我是K8和Azure的新手。也许,我错过了一些显而易见的东西。有没有办法在我的配置中指定芯片架构和操作系统?如果我没有指定,默认值是什么?

    0 回复  |  直到 1 年前
        1
  •  1
  •   Nataraj Medayhal    1 年前

    当容器在非为其构建的体系结构中执行时,将出现以下错误。

    exec /usr/bin/sh: exec format error
    

    默认值将是运行buildkit的os-arch的值。有关如何为其他拱门构建图像的更多详细信息,请参阅 docker buildx documentation .

    在您的情况下,您可以使用下面的arm64(macosAArch64)和x86 arch的构建映像

    docker buildx build --platform=linux/amd64,linux/arm64