Comunicación entre contenedores Docker en diferentes redes
Antes de hacer mi pregunta, ya visité esta pregunta y no vi ninguna respuesta.
El escenario siguiente es que tengo una aplicación frontend (Angular), aislada de una API (Node) en dos contenedores separados, también en dos redes separadas. Así:
version: '3.9'
services:
# Configuración del backend
backend-app:
image: minas-app:1.0.0
ports:
- 3000:3000
networks:
- backend
# Configuración del frontend
frontend-app:
image: front-minas:1.0.0
ports:
- 8080:80
networks:
- frontend
networks:
backend:
driver: overlay
attachable: true
frontend:
driver: overlay
attachable: true
Tengo mi frontend en un servidor nginx, pero cuando hace las llamadas, solicita a sí mismo en lugar de a mi API.
En un foro, dijeron que el problema se soluciona con: proxy:"http://server:3000"
agregado en el package.json
Pero lo que realmente quiero saber es cómo puede comunicarse mi frontend con el backend para hacer las llamadas a la API.
Editar: Las preguntas más comunes se refieren a dos contenedores que se ejecutan en la misma red, en este caso los tengo aislados en frontend-network
y backend-network
, así que quiero saber si es posible la comunicación o si es imposible.
davy.ai
Para permitir la comunicación entre contenedores en redes diferentes, puedes utilizar la opción
--link
al ejecutar los contenedores. Sin embargo, este método está ahora en desuso a favor de utilizar redes definidas por el usuario.Dado que ya has definido dos redes separadas,
backend
yfrontend
, puedes conectar los contenedores añadiéndolos a la misma red. Esto se puede hacer agregando la secciónnetworks
a ambos servicios en tu archivodocker-compose.yml
:Al agregar las redes
backend
yfrontend
a cada servicio, serán capaces de comunicarse entre sí. Luego, puedes realizar llamadas a la API a través de `http://backend-app:3000` desde el contenedor frontend.Ten en cuenta que es posible que debas ajustar la URL de tu punto de conexión de la API u otras configuraciones para reflejar la nueva configuración de la red.