es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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 y frontend, puedes conectar los contenedores añadiéndolos a la misma red. Esto se puede hacer agregando la sección networks a ambos servicios en tu archivo docker-compose.yml:

    version: '3.9'
    
    services:
    
      # Configuración del Backend
      backend-app:
        image: minas-app:1.0.0
        ports:
          - 3000:3000
        networks:
          - backend
          - frontend # agregar la red frontend
    
      # Configuración del FrontEnd   
      frontend-app:
        image: front-minas:1.0.0
        ports:
          - 8080:80
        networks:
          - frontend
          - backend # agregar la red backend
    
    networks:
      backend:
        driver: overlay
        attachable: true
      frontend:
        driver: overlay
        attachable: true
    

    Al agregar las redes backend y frontend 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.

Comments are closed.