0

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'
3
  • Pregunta de siempre: tenes 2 o mas versiones de Python instaladas?
    – Dante S.
    Commented el 29 jun. 2022 a las 16:49
  • @DanteS. no, solo tengo una version instalada Commented el 29 jun. 2022 a las 16:49
  • ¿Puedes indicar exactametne cómo lo ejecutas con docker-compose?¿Puedes añadir el log de docker? Commented el 29 jun. 2022 a las 19:10

1 respuesta 1

0

no estas en el directorio correcto a lo mejor

puedes copiar a la raiz :

COPY ./app ./code/app
COPY ./requirements.txt requirements.txt
RUN pip install -y -r requirements.txt
WORKDIR /code
EXPOSE 8000
1
  • ya lo intente pero me sigue generando el mismo error Commented el 29 jun. 2022 a las 17:16

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.