services: # Servicio del Backend inventario-api: build: context: . dockerfile: backend/Dockerfile 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 # Servicio del Frontend inventario-frontend: build: context: ./frontend dockerfile: Dockerfile container_name: inventario-frontend restart: unless-stopped expose: - "80" # El Nginx del frontend escucha en el puerto 80 interno networks: - inventario-net # Proxy Inverso que expone los servicios al exterior inventario-proxy: image: nginx:1.25-alpine container_name: inventario-proxy restart: unless-stopped 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 depends_on: - inventario-api - 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