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"]
操作流程
- 该Flask应用在本地VS Code中运行正常
- 通过AWS CodeBuild构建镜像并推送到ECR仓库
- 执行命令创建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
相关产品推荐
相关产品推荐

