Il problema è legato al punto di origine. Se accedi a localhost dall'interno di un contenitore Docker, localhost punta alla finestra mobile stessa, non al server host, e quindi la chiamata non raggiunge l'host o le altre finestre mobili.
Se tutti i tuoi docker si trovano sulla stessa macchina host, il modo più semplice per farli parlare tra loro tramite localhost è condividere una rete tra i container in esecuzione. Per prima cosa esegui normalmente il back-end, quindi avvia gli altri contenitori con --net interruttore:
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
Ora tutte le porte esposte e mappate da qualsiasi container che condivide la rete dovrebbero essere raggiungibili in localhost da qualsiasi finestra mobile.
- Per accedere al contenitore dell'app di servizio da qualsiasi luogo, utilizzare la macchina:8080.
- Per accedervi localmente dal server host, utilizzare localhost:8080.
- Per accedervi internamente dall'app di servizio, utilizza locahost:8080.
- Per accedere all'app del servizio dall'app client, utilizza localhost:8080
L'app client sarà esposta al mondo solo sulla porta 3000 se la esponi anche nella finestra mobile che contiene il contenitore. La porta esposta non dovrebbe essere la stessa in quanto ciò confonde la rete:
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
Ora puoi accedere all'app client dall'esterno utilizzando machine:3001.