Problemet är relaterat till ursprungsplatsen. Om du får åtkomst till localhost från insidan av en Docker-behållare, pekar den lokala värden på dockern själv, inte värdservern, och därför når samtalet inte värden eller de andra dockningsoperatörerna.
Om alla dina hamnarbetare är på samma värddator är det enklaste sättet att få dem att prata med varandra via localhost att dela ett nätverk mellan behållarna vid körning. Kör först backend normalt, starta sedan de andra behållarna med --net switch:
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
Nu bör alla portar som exponeras och mappas av någon av behållarna som delar nätverket vara tillgängliga under localhost från vilken som helst av hamnarbetarna.
- För att komma åt service-app-behållaren var som helst, använd machine:8080.
- För att komma åt den lokalt från värdservern, använd localhost:8080.
- Använd locahost:8080 för att komma åt den internt från tjänsteappen.
- För att komma åt tjänsteappen från klientappen, använd localhost:8080
Klientappen kommer bara att exponeras över port 3000 för världen om du också exponerar den i dockningsstationen som har behållaren. Den exponerade porten bör inte vara densamma eftersom detta förvirrar nätverket:
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
Nu kunde du komma åt klientappen utifrån med hjälp av maskin:3001.