Wpis z mikrobloga

Hej, mam taki problem z Dockerem, że mam dwa mikroserwisy: jeden config-service i jeden discovery-service. Jak uruchomię je bez Dockera (czyli po prostu uruchamiam ich JARy na swoim kompie), to discovery-service sobie normalnie pobiera konfigurację z serwera konfiguracyjnego i wszystko działa. Jednak gdy w dockerze kontenery z obrazów tych aplikacji skonfiguruję tak:

config-service: host port 8090, container port 8090
discovery-service: host port 8060, container port 8060

To wtedy jak uruchomię kontener config-service, to mogę w przeglądarce zobaczyć JSON z konfigiem discovery-service pod adresem "localhost:8090/discovery-service/default", jednak jak uruchomię kontener discovery-service to Spring mi rzuca komunikatem:

"Could not locate PropertySource: I/O error on GET request for "http://localhost:8090/discovery-service/default": Connection refused"


Czyli po prostu poprzez dockera w jakiś sposób sprawiam, że discovery-service nie widzi tego co hostuje config-service pomimo tego, że ja mogę w przeglądarce pod adresem podanym w powyższym błędzie normalnie dokonywać interakcji z tym serwisem.

Tutaj pojawia się moje pytanie - potrzebna jest jakaś dodatkowa konfiguracja żeby zkonteneryzowane aplikacje widziały inne aplikacje? Jakaś inna konfiguracja portów, albo wspólnych sieci? Szukałem na necie różnych fraz, ale nic co do tej pory znalazłem nie rozwiązuje mojego problemu. Będę wdzięczny za jakiekolwiek wskazówki.

#spring #docker #java #microservices #mikroserwisy
  • 15
  • Odpowiedz
@Wrath_of_the_Tyrant: jak odpalasz je w osobnych kontenerach to nie używaj localhost w adresach tylko adresy kontenerow.
Wystartuj je że wspólna siecią, z nazwami itp. Jeśli odpalasz dockera przez VBoxa to zastąp localhost adresem maszyny (domyślnie 192.168.99.100).
I pamiętaj - nigdy nie używaj localhosta.
  • Odpowiedz
@Wrath_of_the_Tyrant: ty widzisz na localhoscie bo docker ci wystawil porty do ciebie. Ale kontenery nie widza „twojego” localhosta tylko swoj wewnetrzny. I w tym wypadku sa to dwa rozne localhosty bo masz dwa kontenery
  • Odpowiedz
@Wrath_of_the_Tyrant: Używasz wtedy hostname zamaist IP a hostname jest nazwa kontenera. W każdym razie takie rzeczy powinny być konfigurowalne przez zmienne środowiskowe w kontenerach.

Jeśli piszesz to w spring boot to zmienne w konfiguracji możesz ustawiać za pomocą zmiennych środowiskowych.

Ogólnie jak odpalasz kontener to on ma wewnętrzna sieć i localhost który widzi apka w środku kontenera to nie jest maszyna na której odpaliles dockera.
  • Odpowiedz
via Wykop Mobilny (Android)
  • 1
@Wrath_of_the_Tyrant: jak odpalasz w do dockerze to zamiast localhosta masz nazwę konteneru czyli np kontener 'database' to zastepujesz localhosta w URL na tą nazwę
Żeby to w springu zrobić to polecam użyć profili, w .yml możesz kilka profili w jednym pliku ustawic, poszukaj na necie
Potem tylko ustawiasz zmienna środowiskowa albo przy samej komendzie która odpalasz jara wybierasz profil
  • Odpowiedz