Żądanie http aplikacji SPA do backendu w kontenerze

Żądanie http aplikacji SPA do backendu w kontenerze
CE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Hej, mam dwie proste aplikacje backendowe napisane w Spring Boot i jedną apkę webową napisaną w Angularze

  • Pierwsza aplikacja backendowa to users-a, pozwala zwrócić listę kilku userów, działa na porcie 8080
  • Druga aplikacja to backendowa to users-b, pozwala zwrócić listę dodatkowych userów oraz tych z users-a (wysyła żądanie także do users-a i zwraca połączoną listę), działa na porcie 8080

Aplikacja webowa działa na porcie 80, pobiera listę użytkowników z aplikacji users-b (czyli i tych z users-a i tych z users-b) i wyświetla ją

Mój plik docker-compose.yml:

Kopiuj
version: "3"

services:
  users-a:
    build: ./users-a
    ports: 
      - 8001:8080
  users-b:
    build: ./users-b
    ports:
      - 8002:8080
    depends_on: 
      - users-a
  web-app:
    build: ./web-app
    ports:
      - 8000:80
    depends_on: 
      - users-b

Jak odpalam docker-compose up, budują się obrazy, potem usługi wstają poprawnie

Mogę za pomocą Postmana poprzez adres localhost:8001 w systemie gospodarza pobrać listę userów z users-a
Mogę za pomocą Postmana poprzez adres localhost:8002 w systemie gospodarza pobrać listę userów z users-b (czyli z obu - adres podawany w aplikacji users-b przy żądaniu do users-a to: http://users-a:8080/api/users)
Ale nie mogę wyświetlić tej listy, gdy wpisuję localhost:8000 w systemie gospodarza, to aplikacja wyświetla tylko nagłówki i informacje statyczne, a lista jest pusta. Użyty adres to http://users-b:8080/api/users (to samo co wcześniej, tylko b)

Wyświetla się błąd: ERR_NAME_NOT_RESOLVED w konsoli przeglądarki. Adres nie znaleziony.
Dodałem w aplikacji users-b adnotację @CrossOrigin na kontrolerze, żeby CORS'a nie wywalało

Jak to naprawić? Gdzie mam błąd? Ogarnia ktoś dockera? Pliska pomóżcie

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0

Jak otwierasz localhost:8000, to powinieneś dostać aplikację w angularze która się podnosi i normalnie działa - dzieje się tak?
Potem, taka aplikacja może strzelić do backendu, i powinna strzelić pod localhost:8002 jeśli ma się dobić do users-b (i faktycznie musisz ustawić cors odpowiedni, bo standard jest raczej że client strzela pod swój origin). Pod http://users-b:8080 mógłbyś strzelić z wewnątrz kontenera, a nie z gospodarza (gdybyś z kontenera uruchomił przeglądarkę, i na nim odpalił angular). A przecież apkę w angularze otwierasz w przeglądarce w gospodarzu na pewno. Ona może być serwowana z kontenera, ale uruchamiasz ją na hoście.

RJ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 480
0

URL API musi być jak nazwa serwisu na BE czyli strzelasz z SPA http://users-b/{reszta urla do zasobu}

Compose tworzy swoj network dla tych wszystkich kontenerów i DNS tak działa wewnatrz.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.