MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Einrichten mehrerer Docker-Container und MongoDB zur Ausführung in CircleCI

Das Problem bezieht sich auf den Ursprungsort. Wenn Sie von innerhalb eines Docker-Containers auf localhost zugreifen, zeigt localhost auf den Docker selbst, nicht auf den Host-Server, und daher erreicht der Aufruf weder den Host noch die anderen Docker.

Wenn sich alle Ihre Docker auf demselben Hostcomputer befinden, können Sie sie am einfachsten über localhost miteinander kommunizieren lassen, indem Sie ein Netzwerk zwischen den Containern während der Ausführung freigeben. Führen Sie zuerst das Backend normal aus und starten Sie dann die anderen Container mit --net Schalter:

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

Jetzt sollten alle Ports, die von einem der Container, die sich das Netzwerk teilen, verfügbar gemacht und zugeordnet werden, unter localhost von jedem der Docker aus erreichbar sein.

  • Um von überall auf den Service-App-Container zuzugreifen, verwenden Sie machine:8080.
  • Um vom Hostserver lokal darauf zuzugreifen, verwenden Sie localhost:8080.
  • Um intern von der Service-App darauf zuzugreifen, verwenden Sie locahost:8080.
  • Um von der Client-App aus auf die Service-App zuzugreifen, verwenden Sie localhost:8080

Die Client-App wird der Welt nur dann über Port 3000 zugänglich gemacht, wenn Sie sie auch im Docker mit dem Container verfügbar machen. Der exponierte Port sollte nicht derselbe sein, da dies das Netzwerk verwirrt:

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

Jetzt können Sie von außen mit machine:3001 auf die Client-App zugreifen.