Estoy realizando una aplicacion de practica para aprender docker, la aplicacion la estoy haciendo con Python y fast Api conjunto su tutorial, todo lo estoy utilizando con dockerfile y docker compose, la cual lleva una conexion a base de datos postgresql, pare eso estoy utilizando un orm sqlalchemy, el ejecutar mi aplicacion de forma 'normal' desde la linea de comandos el proyecto corre sin ningun problema, pero al momento de ejecutarlo con docker compose me genera varios errores como el siguiente:
ModuleNotFoundError: No module named 'routers'
Cuando lo 'soluciono' me genera otro error el cual no he podido solucionar y no entiendo el cual es el siguiente:
ModuleNotFoundError: No module named 'sqlalchemy'
Pues si tengo instalado sqlalchemy, requirements.txt:
SQLAlchemy==1.4.39
Este es mi codigo Python, este es el main:
from fastapi import FastAPI
from routers import roles
app = FastAPI()
app.include_router(roles.router)
Y este es el codigo donde se genera el error:
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from db.postgres_connection import SessionLocal, engine
from models import roles
from schemas import roles as schemas
roles.Base.metadata.create_all(bind=engine)
router = APIRouter()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@router.get('/api/v1/roles/', response_model=list[schemas.RoleBase])
async def get_roles(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
roles = get_roles(db, skip=skip, limit=limit)
return roles
Este es mi archivo Dockerfile:
FROM python:3.10.5-slim-buster
WORKDIR /code
COPY ./app ./code/app
COPY ./requirements.txt /code/
RUN pip install -r requirements.txt
EXPOSE 8000
CMD [ "uvicorn", "app.main:app", "--reload" ]
Este es mi archico docker compose:
version: '3.9'
services:
web:
build: .
ports:
- '8000:8000'
volumes:
- .:/app
db:
image: postgres
restart: always
environment:
POSTGRES_USER: *******
POSTGRES_PASSWORD: *******
POSTGRES_DB: bankmel
volumes:
- /home/user/storage:/var/lib/postgresql/data
ports:
- '5432:5432'