Het probleem heeft te maken met het punt van oorsprong. Als u localhost vanuit een Docker-container benadert, verwijst de localhost naar de docker zelf, niet naar de hostserver, en daarom bereikt de oproep de host of de andere dockers niet.
Als al uw dockers zich op dezelfde hostmachine bevinden, is de eenvoudigste manier om ze met elkaar te laten praten via localhost door een netwerk te delen tussen de containers die worden uitgevoerd. Voer eerst de backend normaal uit en start vervolgens de andere containers met de --net schakelaar:
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 moeten alle poorten die worden weergegeven en toegewezen door een van de containers die het netwerk delen, bereikbaar zijn onder localhost vanaf elk van de dockers.
- Gebruik machine:8080 om overal toegang te krijgen tot de service-app-container.
- Gebruik localhost:8080 om lokaal toegang te krijgen vanaf de hostserver.
- Gebruik locahost:8080 om het intern vanuit de service-app te openen.
- Gebruik localhost:8080 om toegang te krijgen tot de service-app vanuit de client-app
De client-app wordt alleen via poort 3000 aan de wereld blootgesteld als u deze ook blootstelt in de docker die de container heeft. De blootgestelde poort mag niet dezelfde zijn, omdat dit het netwerk in de war brengt:
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 kon je van buitenaf toegang krijgen tot de client-app met machine:3001.