Masalahnya terkait dengan titik asal. Jika Anda mengakses localhost dari dalam wadah Docker, localhost menunjuk ke buruh pelabuhan itu sendiri, bukan server host, dan oleh karena itu panggilan tidak mencapai host atau buruh pelabuhan lainnya.
Jika semua buruh pelabuhan Anda berada di mesin Host yang sama, cara termudah untuk membuat mereka berbicara satu sama lain melalui localhost adalah dengan berbagi jaringan antara wadah yang dijalankan. Pertama jalankan backend secara normal, lalu mulai container lain dengan --net beralih:
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
Sekarang semua port yang terbuka dan dipetakan oleh salah satu wadah yang berbagi jaringan harus dapat dijangkau di bawah localhost dari salah satu buruh pelabuhan.
- Untuk mengakses service-app-container dari mana saja, gunakan machine:8080.
- Untuk mengaksesnya secara lokal dari server host, gunakan localhost:8080.
- Untuk mengaksesnya secara internal dari aplikasi layanan, gunakan locahost:8080.
- Untuk mengakses aplikasi layanan dari aplikasi klien, gunakan localhost:8080
Aplikasi klien hanya akan diekspos melalui port 3000 ke dunia jika Anda juga mengeksposnya di buruh pelabuhan yang memiliki wadah. Port yang terbuka tidak boleh sama karena ini membingungkan jaringan:
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
Sekarang Anda dapat mengakses aplikasi klien dari luar menggunakan mesin:3001.