Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Docker - dwa nginx
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cześć,
ma dwie aplikacje, powiedzmy app1, app2
obie aplikacje mają swoje środowiska docker startowane przez docker-compose. Każda ma swój własny php oraz nginx. Ponieważ app1 musi slać żądania do app2, wiec w docker-compose w app2 dodałem
Kod
networks:
  default:
    external:
      name: app1_default

Dzięki czemu app1 widzi kontener nginx z app2. I generalnie nie byłoby problemu gdyby nie fakt, że robiąc żądanie do app2 nawet z zewntarz a nie app1 to od czasu do czasu mam 404 NOT FOUND. Gdy wyłącze app1 to błąd ten się nie pojawia. Problem również znika gdy wywale exteneral network z docker-compose w app2
Ewidentnie więc nginx z app1 przechwytuje żądania które teoretycznie powinien łapać nginx z app2

Każdy konfig strony ma swoj właśny server_name więc teoretycznie powinien łapać tylko swoje a niestety łapie też nie swoje.

Jakieś porady?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
gitbejbe
post
Post #2





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

Ostrzeżenie: (0%)
-----


rozdziel na 2 sieci

  1. networks:
  2. app1:
  3. driver: bridge
  4. app2:
  5. driver: bridge
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie bardzo rozumiem gdzie mam to wsadzic?

Kazda z aplikacja ma swoj oddzielny docker-compoer.yml. Konterer php z app1 ma widziec konterer nginx z app2
Go to the top of the page
+Quote Post
gitbejbe
post
Post #4





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

Ostrzeżenie: (0%)
-----


sorki, umknęło mi że masz 2 compose. W jednym compose działałoby to w ten sposób jak napisałem, w 2 oddzielnych od ręki się nie wypowiem, musiałbym się wdrożyć
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Z jednym compose nie mialbym w ogole tego problemu (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A coś takiego https://stackoverflow.com/questions/3808827...ompose-projects
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@viking to wlasnie teraz mam. Tylko sek w tym, ze gdy te dwie apllikacje sa wtej samej sieci, to nginx z pierwszej od czasu do czasu lapie requesty z drugiej co skutkuje rzuceniem NOT FOUND.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Czy obie apki są publiczne? Generalnie wystawiłnbym porty dla obu np. 8080 i 8081 i stukał po portach.
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Obie sa publiczne

stukam po roznych portach
Go to the top of the page
+Quote Post
Pyton_000
post
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


No to stukaj zew_ip:port1 zew_ip:por2 i po problemie. Nie łąćz tych apek w jednej sieci.
Go to the top of the page
+Quote Post
vokiel
post
Post #11





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Opcją jest też dodanie nginxa jako proxy przed tymi obiema apkami.
Go to the top of the page
+Quote Post
batman
post
Post #12





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Sprawdź czy takie coś zadziała:

Kod
services:
  app1:
    extra_hosts:
      - "app2host:host.docker.internal"


To powinno dodać do pliku hosts w kontenerze app1 wpis:
Kod
<twój adres ip>    app2host


Teraz powinieneś byś w stanie wysłać request to app2 bez kombinowania z siecią.

Kilka uwag:
- nie wiem czy host.docker.internal zostanie przetłumaczone na adres ip hosta w takiej postaci. Ja korzystałem z tego wewnątrz kontenera, nigdy z poziomu docker-compose.yml
- będzie musiał pamiętać o porcie (ale podejrzewam, że i tak go używasz)
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
No to stukaj zew_ip:port1 zew_ip:por2 i po problemie. Nie łąćz tych apek w jednej sieci.

To nei dziala. Niewazne jak sie odwoluje do appek, czy host, czy IP, czy nawet po nazwie z kontenera wewnatrz appek to i tak srednio co drugi call leci lapanka z innego nginx. Oczywiscie porty nadal inne. Nawet godzinke spedzilem z szefem, ekspertem od nginx, to sie zalamal na koniec i stwierdzil ze nie kuma o co chodzi.

Cytat
Teraz powinieneś byś w stanie wysłać request to app2 bez kombinowania z siecią.

Ja to wiem, ze jak odlacze sieci to to dziala. I wiem ze odpowiedni wpis w etc/hosts zalatwi sprawe. ALe to jest tylko tymczasowe obejscie problemu. Najbardziej mnie zastanawia jakim cudem oddzielny nginx lapie moje requesty.
Go to the top of the page
+Quote Post
batman
post
Post #14





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat
Najbardziej mnie zastanawia jakim cudem oddzielny nginx lapie moje requesty.

Może coś jest skaszanione w konfiguracji nginx? Jakaś reguła, która przechwytuje wszystkie nieobsłużone requesty? Albo w apce masz jakiś ukryty błąd, który skutkuje 404.
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie ma, sprawdzilem wszystkie virtual hosts, wywalilem wszystkie default ktore nginx instaluje samodzielnie. Nic. Przegladalem to razem z szefem linia po linii i tez nic. Normalnie magia :/

@batman, sprawdzilem jeszcze twoje hosty ale mam problemy pewnie dlatego ze chyba nie rozumiem ten zapis. Dalem tak:
Kod
services:
  php:
   .... tu masa konfiguracje dla kontenera php.....
    extra_hosts:
      - "hubsync_nginx:host.docker.internal"

I dostaje blad:
" Cannot create container for service php: b'invalid IP address in add-host: "host.docker.internal"'"
Go to the top of the page
+Quote Post
batman
post
Post #16





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat
" Cannot create container for service php: b'invalid IP address in add-host: "host.docker.internal"'"

Tak jak się obawiałem, docker compose nie wie co to jest host.docker.internal (IMG:style_emoticons/default/sad.gif) Rzadko z tego korzystałem, zawsze z poziomu kontenera. Liczyłem, że compose będzie w stanie przetłumaczyć to na standardowy adres ip. Cóż, shit happens. Na chwilę obecną nie mam żadnego innego pomysłu.
Go to the top of the page
+Quote Post
aras785
post
Post #17





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

Ostrzeżenie: (0%)
-----


Problem jest banalny, Twoja konfiguracja nginxa jest błędna - łączy się z tym samym FPMem (fpm:9000).

Rozwiązanie może wyglądać tak (dodanie links i podmiane w ngixie):

  1. version: '3'
  2. services:
  3. fpm:
  4. image: my_image/nginx-php:latest
  5. environment:
  6. - DOCKER_ROLE=fpm
  7. restart: always
  8. networks:
  9. - app1_default
  10. volumes:
  11. - ./public:/var/www/public
  12. nginx:
  13. image: my_image/nginx-php:latest
  14. restart: always
  15. ports:
  16. - 72:80
  17. environment:
  18. - DOCKER_ROLE=nginx
  19. - DOCKER_FPM_HOSTNAME=app2_fpm
  20. networks:
  21. - app1_default
  22. links:
  23. - "fpm:app2_fpm"
  24. networks:
  25. app1_default:
  26. external: true


i entrypoint do podmiany konfiguracji w nginxie (dzięki temu ta sama konfiguracja może lecieć na proda):
  1. ...
  2. if [ ! -z "$DOCKER_FPM_HOSTNAME" ]; then
  3. sed -i "s/fastcgi_pass 127.0.0.1:9000/fastcgi_pass $DOCKER_FPM_HOSTNAME:9000/g" /etc/nginx/conf.d/default.conf
  4. fi
  5. ...


Gdybyś potrzebował obrazu nginx + php 7.4 + cron + nodejs + supervisior to napisz priv to podrzucę Ci moje repo obrazu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ustawienie innych wewnetrznych portow w app2 dla php i nginx rozwiazalo sprawe.
Dzieki @Pyton za sugestie na pw oraz @aras za zwrocenie na to uwagi
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:19