Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

272
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda