sql >> Base de Datos >  >> NoSQL >> MongoDB

Configuración de varios contenedores Docker y MongoDB para ejecutar en CircleCI

El problema está relacionado con el punto de origen. Si accede a localhost desde dentro de un contenedor de Docker, localhost apunta a la ventana acoplable en sí, no al servidor host y, por lo tanto, la llamada no llega al host ni a las otras ventanas acoplables.

Si todos sus acopladores están en la misma máquina host, la forma más fácil de hacer que se comuniquen entre sí a través de localhost es compartir una red entre los contenedores en ejecución. Primero ejecute el backend normalmente, luego inicie los otros contenedores con --net cambiar:

docker run [other params] -d -p 8080:8080 --name service-app-container service_app_image docker run [other params] -p 3000:3000 --net="container:service-app-container" --name client-app-container client_app_image

Ahora todos los puertos expuestos y mapeados por cualquiera de los contenedores que comparten la red deben ser accesibles bajo localhost desde cualquiera de los acopladores.

  • Para acceder al contenedor de la aplicación de servicio desde cualquier lugar, use machine:8080.
  • Para acceder localmente desde el servidor host, use localhost:8080.
  • Para acceder internamente desde la aplicación de servicio, use locahost:8080.
  • Para acceder a la aplicación de servicio desde la aplicación del cliente, use localhost:8080

La aplicación cliente solo se expondrá a través del puerto 3000 al mundo si también la expone en la ventana acoplable que tiene el contenedor. El puerto expuesto no debe ser el mismo ya que esto confunde a la red:

docker run [other params] -d -p 8080:8080 3001:3000 --name service-app-container service_app_image docker run [other params] -p 3000:3000 --net="container:service-app-container" client_app_image

Ahora puede acceder a la aplicación del cliente desde el exterior usando machine:3001.