Problém souvisí s místem původu. Pokud přistupujete k localhost z kontejneru Docker, localhost ukazuje na samotný docker, nikoli na hostitelský server, a proto se volání nedostane k hostiteli ani k ostatním dockerům.
Pokud jsou všechny vaše dockery na stejném hostitelském počítači, nejjednodušší způsob, jak je přimět, aby spolu mluvili přes localhost, je sdílet síť mezi kontejnery za běhu. Nejprve normálně spusťte backend a poté spusťte ostatní kontejnery pomocí --net přepínač:
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
Nyní by všechny porty vystavené a zmapované kterýmkoli kontejnerem sdílejícím síť měly být dostupné pod localhostem z kteréhokoli dockeru.
- Pro přístup ke kontejneru service-app-container odkudkoli použijte machine:8080.
- Chcete-li k němu přistupovat lokálně z hostitelského serveru, použijte localhost:8080.
- Chcete-li k němu přistupovat interně ze servisní aplikace, použijte locahost:8080.
- Pro přístup k servisní aplikaci z klientské aplikace použijte localhost:8080
Klientská aplikace bude světu vystavena pouze přes port 3000, pokud ji vystavíte také v ukotvitelném panelu, který obsahuje kontejner. Odkrytý port by neměl být stejný, protože to mate síť:
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
Nyní můžete přistupovat ke klientské aplikaci zvenčí pomocí machine:3001.