Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Docker - dwa nginx
nospor
post 3.07.2020, 12:01:05
Post #1





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
gitbejbe
post 3.07.2020, 19:05:01
Post #2





Grupa: Zarejestrowani
Postów: 515
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 5.07.2020, 18:27:04
Post #3





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
gitbejbe
post 6.07.2020, 19:48:48
Post #4





Grupa: Zarejestrowani
Postów: 515
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 7.07.2020, 08:55:54
Post #5





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Z jednym compose nie mialbym w ogole tego problemu wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 7.07.2020, 09:04:28
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1113
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 7.07.2020, 09:26:04
Post #7





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post 7.07.2020, 19:37:09
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 8.07.2020, 06:35:40
Post #9





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
Dołączył: 27.12.2004




Obie sa publiczne

stukam po roznych portach


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post 8.07.2020, 17:41:42
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 8.07.2020, 21:47:04
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 9.07.2020, 03:32:29
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)


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
nospor
post 9.07.2020, 09:04:35
Post #13





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
batman
post 9.07.2020, 09:24:32
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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
nospor
post 10.07.2020, 17:09:10
Post #15





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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"'"


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
batman
post 10.07.2020, 18:18:23
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 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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
aras785
post 12.07.2020, 00:43:23
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 smile.gif
Go to the top of the page
+Quote Post
nospor
post 13.07.2020, 10:58:02
Post #18





Grupa: Moderatorzy
Postów: 36 429
Pomógł: 6289
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.03.2024 - 06:02