Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

264
Vistas
¿Por qué un contenedor angular necesita un puerto expuesto para conectarse?

esto es solo una pregunta sobre teoría, mi aplicación funciona perfectamente...

Entonces, tengo 3 servicios ejecutándose con docker-compose: una base de datos postgres , un springboot de backend y un angular de frontend .

Por lo que sé, los contenedores docker pueden acceder a puertos desde otros contenedores docker sin necesidad de exponer el puerto, por lo que no es necesario exponer ni vincular los puertos porque todos son contenedores y pueden acceder entre sí con el modo de red de puente predeterminado ( eso es lo que aprendí, no sé si esto es correcto) .

Solo necesito exponer el puerto desde el contenedor frontend para poder acceder desde mi host local.

El caso es que puedo acceder a la base de datos con el backend (backend -> base de datos) sin necesidad de exportar ningún puerto, pero con el frontend (frontend -> backend) usando angular con nginx, solo funciona con el puerto del backend expuesto, ¿por qué?

docker-compose.yml:

 version: "3" services: ### DATABASE ### db: image: postgres:latest container_name: mydb network_mode: bridge environment: - POSTGRES_PASSWORD=envpass - POSTGRES_USER=envuser - POSTGRES_DB=database # It works without exposing # expose: # - 5432 # ports: # - 5433:5432 ### BACKEND ### backend: image: angularback container_name: backend network_mode: bridge expose: - 8080 ports: - 8082:8080 depends_on: - db links: - db ### FRONTEND ### frontend: image: angularfront container_name: frontend network_mode: bridge expose: - 80 ports: - 8084:80 depends_on: - backend links: - backend
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Su interfaz de Angular está realizando solicitudes al backend de Spring desde fuera del contenedor de la interfaz. Está haciendo una solicitud desde el interior de su navegador. Es por eso que el backend también debe estar expuesto.

En segundo lugar, no necesita links . La vinculación se realizará automáticamente ya que ambos servicios están en la misma red.

Aquí hay una configuración actualizada, que usa redes en su lugar:

 version: "3" services: ### DATABASE ### db: image: postgres:latest environment: - POSTGRES_PASSWORD=envpass - POSTGRES_USER=envuser - POSTGRES_DB=database # Only add the ports here, if you want to access the database using an external client. # ports: # - "5433:5432" networks: - backend ### BACKEND ### backend: image: angularback ports: - "8082:8080" depends_on: - db networks: - backend - frontend ### FRONTEND ### frontend: image: angularfront ports: - "8084:80" depends_on: - backend networks: - frontend networks: backend: frontend:

Cuando no se esté ejecutando en producción, también recomendaría vincular todos los puertos directamente a la interfaz del host (127.0.0.1), para evitar que otros en su red accedan al puerto de su máquina, así:

 ports: - "127.0.0.1:8084:80"
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda