FastAPI全栈Docker项目遇sqlalchemy缺失及poetry shell报错问题
解决Docker中FastAPI服务依赖找不到及poetry shell报错的问题
问题分析
- 后端和Celery Worker服务启动时找不到
sqlalchemy,根源是Docker容器中Poetry虚拟环境的依赖未被正确加载 - 添加
poetry shell后出现(25, 'Inappropriate ioctl for device'),是因为poetry shell需要交互式终端,而Docker Compose启动服务默认是非交互式环境,无法满足终端交互要求
解决方案
1. 确保Dockerfile正确配置Poetry环境
修改Dockerfile,保证依赖安装到虚拟环境并让系统能找到虚拟环境的Python:
# 配置Poetry在项目内创建虚拟环境 RUN poetry config virtualenvs.in-project true # 安装所有生产依赖 RUN poetry install --no-root --no-dev # 将虚拟环境的bin目录加入PATH,确保系统优先使用虚拟环境的Python ENV PATH="/app/venv/bin:$PATH"
2. 修改启动脚本,替换poetry shell为poetry run
找到backend和celeryworker对应的启动脚本(比如start.sh、celeryworker.sh),把原来调用poetry shell的逻辑换成poetry run直接执行命令:
比如原来的启动命令:
poetry shell && python /app/app/backend_pre_start.py
改成:
poetry run python /app/app/backend_pre_start.py
或者直接调用虚拟环境内的Python可执行文件:
/app/venv/bin/python /app/app/backend_pre_start.py
3. 重新构建镜像并启动服务
执行以下命令重新构建相关服务的镜像,确保依赖配置生效:
docker-compose build --no-cache backend celeryworker docker-compose up
4. 验证依赖安装(可选)
进入容器确认sqlalchemy已安装:
docker-compose exec backend bash poetry show sqlalchemy
如果输出sqlalchemy的版本信息,说明依赖已正确安装。
内容的提问来源于stack exchange,提问作者CSSer
相关产品推荐
相关产品推荐

