2015-07-10 23 views
5

sto cominciando con Docker e nginx, e sto cercando di impostare un due contenitore di ambiente in funzione:semplice finestra mobile-comporre con due servizi: nginx e php

  • nginx:latest da un lato
  • php:fpm dall'altro lato

ho problemi con PHP-FPM: ho sempre una Bad Gateway errore .

La mia configurazione è semplice (è la mia directory di lavoro).

mio Docker comporre config TEST_DIR/docker-compose.yml:

nginx: 
    image: nginx 
    ports: 
     - "8080:80" 
    volumes: 
     - ./www:/usr/share/nginx/html 
     - ./conf/nginx.conf:/nginx.conf 
     - ./logs/nginx:/var/log/nginx 
    links: 
     - php:php 
    command: nginx -c /nginx.conf 

php: 
    image: php:fpm 
    ports: 
     - "9000:9000" 
    volumes: 
     - ./www:/var/www/html 

Il nginx config $TEST_DIR/conf/nginx.conf:

user nginx; 
worker_processes 1; 
pid  /var/run/nginx.pid; 

events { 
    worker_connections 2048; 
    multi_accept on; 
    use epoll; 
} 

http { 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    server_tokens off; 
    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 15; 
    types_hash_max_size 2048; 
    include /etc/nginx/mime.types; 
    default_type application/octet-stream; 
    access_log off; 
    error_log off; 
    gzip on; 
    gzip_disable "msie6"; 
    open_file_cache max=100; 


    upstream php-upstream { 
     server php:9000; 
    } 

    server { 
     listen  80; 
     server_name localhost; 

     location/{ 
      root /usr/share/nginx/html; 
      index index.html index.htm; 
     } 

     # Pass PHP scripts to PHP-FPM 
     location ~* \.php$ { 
      fastcgi_pass php-upstream; 

      include   fastcgi_params; 
      fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; 
      fastcgi_param SCRIPT_NAME  $fastcgi_script_name; 
      fastcgi_param HTTPS off; 
     } 

     error_log /var/log/nginx/php_error.log; 
     access_log /var/log/nginx/php_access.log; 
    } 
} 

daemon off; 

Poi, ho messo il mio tenore di PHP nella stessa directory come il mio docker-compose.yml:

$TEST_DIR/www/test.php

<?php phpinfo(); ?> 

Se inizio l'infrastruttura utilizzando docker-compose up e poi andare a localhost:8080/test.php, tanto sono il 502 Gateway e il seguente errore da nginx:

[error] 6#6: *1 connect() failed (113: No route to host) while connecting to upstream, client: 172.17.42.1, server: localhost, request: "GET /phpinsfo2.php HTTP/1.1", upstream: "fastcgi://172.17.0.221:9000", host: "localhost:8080" 

che cosa sta causando l'errore?

+1

Non so se si risolve il problema, ma sembra che ci sia un errore di battitura nella definizione del volume per il contenitore php './www:/var/wwww/html' –

+1

Ho verificato che correggere l'errore di battitura in' ./www:/var/wwww/html' mi permette di vedere il contenuto della pagina '/ test.php'. Anche se il tuo errore 'connect() fallito (113: Nessuna route per l'host)' potrebbe indicare un problema che non riesco a riprodurre. Stai usando l'ultima versione di docker e docker-componi? – Thomasleveil

+0

Sto usando ** docker 1.7.0 build 0baf609 ** e ** docker-comporre 1.3.1 **. Event con quello errore di battitura, ho ancora gli stessi problemi: Il server nginx serve correttamente file statico, ma il file php non viene instradato a php-fpm, sto ancora ricevendo l'errore 502 Bad Gateway Il punto è che io non capisco se la richiesta viene instradata al php fpm o no ... Come posso testarlo? – Clement

risposta

2

Sono finalmente riuscito a farlo funzionare.

Il problema era che il mio computer host (Fedora 21) aveva un firewall abilitato.

Così facendo: systemctl stop firewalld risolto il mio problema.

A quanto pare questo è un problema ben noto a Red Hat Linux:
Bug 1098281 - Docker interferes with firewall initialisation via firewalld

+0

Pensavo che la finestra mobile stia aggiornando iptables come parte della sua magia di rete. Immagino che ci siano ancora alcuni nodi da risolvere. Questo mi ha aiutato. Grazie per la pubblicazione! –

+0

È ancora richiesta la disattivazione di firewalld? Per quanto ne so, il bug è stato chiuso. – MauganRa