如何在ECS中运行FastAPI/Uvicorn应用?部署路径错误排查
问题分析与解决方案
核心错误原因
你遇到的executable file not found in $PATH错误,根源是ECS任务定义中命令的传递格式错误。
在Docker Compose中,command字段接受字符串,Compose会自动将其解析为["bash", "-c", "xxx"]的参数列表;但ECS的command字段要求直接传递参数数组,你当前把整个命令作为单个字符串放在数组里,ECS会尝试将这个完整字符串当作可执行文件来运行,自然找不到对应的程序。
修正步骤
1. 调整ECS任务定义的Command配置
将任务定义中的command部分修改为如下格式,把命令拆分为三个独立的数组元素:
"command": [ "bash", "-c", "alembic -c alembic.ini upgrade head && gunicorn --bind 0.0.0.0:8000 -k uvicorn.workers.UvicornWorker src.backend_service.main:app" ]
2. 清理Dockerfile中的冗余配置(可选)
你的Dockerfile里设置了ENV PATH="/code/venv/bin:$PATH",但实际并没有创建虚拟环境(没有python -m venv venv相关步骤),这条配置无效,可以删除,避免混淆。pip安装的alembic和gunicorn会默认放在/usr/local/bin,该路径已经在系统PATH中,无需额外配置。
3. 验证镜像完整性
确保推送到ECR的镜像包含所有必要文件:
alembic.inidb_alembic目录src/backend_service代码- 依赖包已正确安装(可以通过本地
docker run --rm your-image which alembic和docker run --rm your-image which gunicorn验证命令是否存在)
其他注意事项
- 确认Fargate任务的执行角色拥有拉取ECR镜像的权限,任务角色拥有访问数据库(如RDS)等资源的权限
- 检查容器的
workingDirectory已设置为/code/(你当前的配置正确)
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

