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

在Kubernetes中运行Python(Django)服务遇exec格式错误求助

问题排查:Pod反复崩溃,报错exec /usr/local/bin/python: exec format error

环境与配置信息

Dockerfile

ARG PYTHON_VERSION=3.7

FROM python:${PYTHON_VERSION}

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1


ARG USERID
ARG USERNAME

WORKDIR /code

COPY requirements.txt ./
COPY manage.py ./

RUN pip install -r requirements.txt 
RUN useradd -u "${USERID:-1001}" "${USERNAME:-jananath}"

USER "${USERNAME:-jananath}"

EXPOSE 8080

COPY . /code/

RUN pwd 
RUN ls

ENV PATH="/code/bin:${PATH}"
# CMD bash

ENTRYPOINT ["/usr/local/bin/python"]
# CMD ["manage.py", "runserver", "0.0.0.0:8080"]

Kubernetes Deployment清单

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    tier: my-app
  name: my-app
  namespace: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      tier: my-app
  template:
    metadata:
      labels:
        tier: my-app
    spec:
      containers:
      - name: my-app      
        image: "<RETRACTED>.dkr.ecr.eu-central-1.amazonaws.com/my-ecr:webv1.11"
        imagePullPolicy: Always
        args:
          - "manage.py"
          - "runserver" 
          - "0.0.0.0:8080"                     
        env:
          - name: HOST_POSTGRES
            valueFrom:
              configMapKeyRef:
                key: HOST_POSTGRES
                name: my-app  
          - name: POSTGRES_DB
            valueFrom:
              configMapKeyRef:
                key: POSTGRES_DB
                name: my-app
          - name: POSTGRES_USER
            valueFrom:
              configMapKeyRef:
                key: POSTGRES_USER
                name: my-app
          - name: USERID
            valueFrom:
              configMapKeyRef:
                key: USERID
                name: my-app
          - name: USERNAME
            valueFrom:
              configMapKeyRef:
                key: USERNAME
                name: my-app                

          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                key: POSTGRES_PASSWORD
                name: my-app

        ports:
          - containerPort: 8080

        resources:
          limits:
            cpu: 1000m
            memory: 1000Mi
          requests:
            cpu: 00m
            memory: 1000Mi

错误日志

exec /usr/local/bin/python: exec format error

本地正常运行的docker-compose配置

services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  web:
    build: 
      context: .
      args:
        USERID: ${USERID}
        USERNAME: ${USERNAME}
    command: manage.py runserver 0.0.0.0:8080
    volumes:
      - .:/code
    ports:
      - "8080:8080"
    environment:
      - POSTGRES_NAME=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    env_file:
      - .env

问题原因分析

exec format error 本质是镜像架构与Kubernetes集群节点的CPU架构不匹配:

  • 本地构建镜像时(比如M系列Mac的ARM64架构),默认生成对应本地架构的镜像;
  • 而Kubernetes集群节点(比如AWS EC2的x86_64架构)无法执行ARM架构的二进制文件(此处为/usr/local/bin/python);
  • docker-compose在本地运行时,使用与镜像一致的架构,因此无异常。

解决方案

1. 构建指定架构的镜像

针对集群节点的CPU架构(比如x86_64),明确指定架构构建:

# 构建x86_64架构镜像
docker build --platform linux/amd64 -t <你的镜像名>:webv1.11 .

# 推送镜像到私有仓库
docker push <你的镜像名>:webv1.11

2. 构建多架构镜像(推荐)

使用Docker Buildx构建支持多架构的镜像,适配不同集群环境:

# 初始化buildx(首次使用)
docker buildx create --use

# 构建并推送支持amd64、arm64的多架构镜像
docker buildx build --platform linux/amd64,linux/arm64 -t <你的镜像名>:webv1.11 --push .

3. 验证镜像架构

可通过以下命令确认镜像支持的架构:

# 查看本地镜像架构
docker inspect <你的镜像名>:webv1.11 | grep -i architecture

# 查看远程镜像架构(需Docker 20.10及以上版本)
docker manifest inspect <你的镜像名>:webv1.11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:50:20