Puncte:0

Gazda nu este accesibilă în timp ce se conectează la amonte din containerul Node Docker

drapel in

Am un API la backend.mysite.local și îl pot accesa direct din browser. Dar când încerc să apelez API-ul din containerul Node, primesc 502 Bad Gateway cu următoarea eroare:

connect() a eșuat (113: Gazda este inaccesibilă) în timpul conectării la în amonte, client: 172.20.0.1, server: www.mysite.local, cerere: „GET /api/items HTTP/1.1", în amonte: „http://172.20.0.3:3000/api/items”, gazdă: „www.mysite.local”

Aceasta este configurația mea nginx (sunt nou în nginx, așa că s-ar putea să o fac într-un mod mai scurt, dar este în mare parte blocuri pentru redirecționarea de la portul 80 la portul 443 - așa că aș aprecia dacă o revizuiți de asemenea)

Server {
    asculta 443 ssl;
    nume_server backend.mysite.local;
    certificat_ssl /etc/ssl/mysite.local.crt;
    ssl_certificate_key /etc/ssl/mysite.local.key;
    
    index index.php index.html;
    nume_server backend.mysite.local;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/public;
    
    Locație / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    locație ~ \.php$ {        
        try_files $uri = 404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;

        
        setați $METHODS 'GET, POST, OPTIONS, HEAD';
        setați $HEADERS 'Autorizare, Origine, X-Solicitat-Cu, Conținut-Tip, Accept';
        
        
        if ( $request_method = POST ){
          add_header „Acces-Control-Allow-Origin” „https://www.mysite.local”;
          add_header 'Acces-Control-Allow-Credentials' 'true';
        }

    }
    
}

Server {
    asculta 80;
    nume_server http.backend.mysite.local;
    returnează 301 https://backend.mysite.local$request_uri;

}

Server {
    asculta 80;
    nume_server nginx;
    returnează 301 https://backend.mysite.local$request_uri;

}



Server {
    asculta 80;
    nume_server www.mysite.local;
    returnează 301 https://www.mysite.local$request_uri;
}

Server {
    asculta 80;
    nume_server mysite.local;
    returnează 301 https://www.mysite.local$request_uri;
}

Server {
    asculta 443 ssl;
    nume_server mysite.local;
    certificat_ssl /etc/ssl/mysite.local.crt;
    ssl_certificate_key /etc/ssl/mysite.local.key;
    returnează 301 https://www.mysite.local$request_uri;
}


  Server {   
    asculta 443 ssl;
    nume_server www.mysite.local;     
    certificat_ssl /etc/ssl/mysite.local.crt;
    ssl_certificate_key /etc/ssl/mysite.local.key;
    

     Locație / {      
     proxy_pass http://node:3000;
      
    }
  }

Edit: Acesta este docker-compose.yml:

retele:
    site-ul meu:
        şofer: pod

Servicii:
    nginx:
        imagine: nginx:stable-alpine
        container_name: nginx
        porturi:
            - „8088:8088”
            - „80:80”  
            - „443:443”          
   
        retele:
            - site-ul meu                

    php:        
        construi:
            context: ./laravel
            dockerfile: Dockerfile
        nume_container: php
        porturi:
            - „9000:9000”
        retele:
            - site-ul meu

    nodul:
        construi:
            context: ./react
            dockerfile: Dockerfile
        container_name: reacționează
        
        porturi:
            - „3000:3000”       
Michael Hampton avatar
drapel cz
Cum ți-ai creat containerele? Afișați configurația relevantă (de exemplu, docker-compose.yml).
Stackerito avatar
drapel in
Mulțumesc, am editat postarea, am adăugat `docker-compose.yml`. Mi-am dat seama că s-ar putea să fi înțeles complet greșit întreaga mea arhitectură a aplicației. Am amestecat numele gazdei mașinii Windows gazdă cu numele containerelor interne Docker și totul s-a amestecat.
Michael Hampton avatar
drapel cz
Sunt toate containerele tale ridicate? Eroarea pe care ați primit-o este una la care m-aș aștepta dacă containerul nu rula.
Stackerito avatar
drapel in
Ești un adevărat om expert, containerul nod s-a închis după ce am avut o eroare în cod. Și am dreptate în ceea ce am spus în comentariul anterior? Că mi-am amestecat numele de gazdă cu denumirea internă Docker? Ar trebui să folosesc modul `gazdă`, în cazul meu, poate?
Michael Hampton avatar
drapel cz
Nu folosesc Docker pe Windows, așa că nu pot spune nimic despre asta. Din toate problemele pe care le-am văzut pe oameni, probabil că nu l-aș recomanda. Oricum, nu va fi implementat în producție în acest fel.
Stackerito avatar
drapel in
mulțumesc.deci, dacă acesta este locul potrivit să întreb: în cazul meu în care am servicii Node, Nginx, MySQL și PHP, cum mi-ați recomanda să-mi dezvolt proiectul? Direct pe Windows (Așa cum am făcut eu în primul rând?). Vreau să fie cât mai aproape de producție (dacă este un lucru bun?). Tocmai am început cu Docker pentru că am văzut că unele locuri de muncă cer experiență cu el, așa că am vrut să învăț
Michael Hampton avatar
drapel cz
Mai degrabă, direct pe Linux fără intermediari precum WSL2 care fac ocazional lucruri bizare. Porniți propriile mașini virtuale Linux și jucați-vă.
Stackerito avatar
drapel in
Mulțumesc. Și există o modalitate corectă de a instala Nginx pe Windows? Dacă nu, probabil că voi instala Linux ca dual boot alături de mașina mea Windows

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.