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

Python Docker镜像部署Pod时出现main.py文件未找到问题

问题:Python镜像Pod启动失败(CrashLoopBackOff)

场景概述

我创建了一个Python Flask应用,本地运行正常,但通过AWS CodeBuild构建镜像推送到ECR后,部署为Kubernetes Pod时出现CrashLoopBackOff状态,日志显示找不到main.py文件。

相关文件内容

main.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from Python!"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

requirements.txt

Flask

Dockerfile

FROM python:3.7

RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt

EXPOSE 5000
CMD ["python", "/app/main.py"]

操作流程

  1. 该Flask应用在本地VS Code中运行正常
  2. 通过AWS CodeBuild构建镜像并推送到ECR仓库
  3. 执行命令创建Pod:
k run hello-pod --image=<image uri>:v1

错误信息

Pod状态为CrashLoopBackOff,执行kubectl logs hello-pod查看日志,报错:

Python: can’t open file ‘main.py’ : [Errno 2] No such file or directory

排查与解决方法

原因分析

报错核心是镜像内找不到main.py,可能的触发点有两个:

  • Docker构建时,文件未被正确复制到镜像中
  • CMD命令的路径存在上下文冲突

具体解决方案

1. 修正Dockerfile的CMD命令

Dockerfile中已设置WORKDIR /app,当前工作目录就是/app,直接使用相对路径执行命令即可,避免绝对路径可能带来的错误:

FROM python:3.7

RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt

EXPOSE 5000
CMD ["python", "main.py"]

2. 检查CodeBuild构建上下文

确认AWS CodeBuild项目的buildspec.yml配置:

  • 确保没有排除main.py、requirements.txt的规则
  • 确认docker build命令是在包含所有必要文件的目录下执行的

3. 验证镜像内容

拉取ECR中的镜像,运行临时容器检查文件是否存在:

docker run -it --rm <image uri>:v1 ls /app

如果输出里没有main.py,说明构建时文件未被复制,需要调整构建上下文或Dockerfile的ADD指令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:42:48