From 3b3ab53ac7f3555b46fa30cdaf51ebd3af41ca53 Mon Sep 17 00:00:00 2001 From: dmolinari Date: Tue, 7 Oct 2025 15:24:18 -0300 Subject: [PATCH] Fix Dockerfiles --- backend/Dockerfile | 16 ++++++++-------- docker-compose.yml | 20 +++++++------------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index c0aa857..e2ac7b4 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,21 +1,21 @@ -# --- Etapa 1: Build --- # Usamos la imagen del SDK de .NET 8 para compilar FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build WORKDIR /src -# Copiamos el archivo .csproj para restaurar dependencias primero (cache optimization) -COPY Inventario.API/Inventario.API.csproj Inventario.API/ -RUN dotnet restore "Inventario.API/Inventario.API.csproj" +# CAMBIO: Las rutas ahora incluyen el prefijo 'backend/' para que coincidan +# con la estructura del repositorio, ya que el contexto de build es la raíz. +COPY ["backend/Inventario.API.csproj", "backend/"] +RUN dotnet restore "backend/Inventario.API.csproj" -# Copiamos el resto del código fuente +# Copiamos todo el contenido del repositorio al contenedor COPY . . -# Publicamos la aplicación en modo Release -WORKDIR "/src/Inventario.API" +# CAMBIO: Nos movemos al directorio correcto del proyecto antes de publicar +WORKDIR "/src/backend" RUN dotnet publish "Inventario.API.csproj" -c Release -o /app/publish /p:UseAppHost=false # --- Etapa 2: Final --- -# Usamos la imagen de runtime de ASP.NET, mucho más ligera +# Usamos la imagen de runtime de ASP.NET 8, mucho más ligera FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS final WORKDIR /app COPY --from=build /app/publish . diff --git a/docker-compose.yml b/docker-compose.yml index eb2f616..9c59d70 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,31 +2,29 @@ services: # Servicio del Backend inventario-api: build: - context: . - dockerfile: backend/Dockerfile + context: . # El contexto es la raíz del proyecto + dockerfile: backend/Dockerfile # Docker encontrará este archivo dentro del contexto container_name: inventario-api restart: unless-stopped - # 'expose' hace que el puerto sea accesible para otros contenedores en la misma red, - # pero NO lo publica en la máquina host. Esto es lo correcto. expose: - "8080" networks: - inventario-net - - shared-net # Para conectar con la DB + - shared-net # Servicio del Frontend inventario-frontend: build: - context: ./frontend - dockerfile: Dockerfile + context: ./frontend # El contexto es la carpeta 'frontend' + dockerfile: Dockerfile # Docker buscará 'Dockerfile' dentro de la carpeta 'frontend' container_name: inventario-frontend restart: unless-stopped expose: - - "80" # El Nginx del frontend escucha en el puerto 80 interno + - "80" networks: - inventario-net - # Proxy Inverso que expone los servicios al exterior + # Proxy Inverso inventario-proxy: image: nginx:1.25-alpine container_name: inventario-proxy @@ -34,7 +32,6 @@ services: volumes: - ./proxy/nginx.conf:/etc/nginx/conf.d/default.conf ports: - # Este es el ÚNICO punto de entrada a la aplicación desde el exterior. - "8900:80" networks: - inventario-net @@ -43,10 +40,7 @@ services: - inventario-frontend networks: - # Red interna para la comunicación entre los servicios de este stack inventario-net: driver: bridge - - # Red externa para conectar con servicios compartidos (la base de datos) shared-net: external: true \ No newline at end of file