2017-04-26 1 views
1

Ich betreibe zwei Docker-Container für PHP5.6:Mehrere Versionen von PHP durch Nginx in Docker

docker run --name php5 \ 
    -v /html1:/var/www/html/site1 \ 
    -d -p 9001:9000 php:5.6-fpm 

Und für PHP7:

docker run --name php7 \ 
    -v /html2:/var/www/html/site2 \ 
    -d -p 9000:9000 php:7-fpm 

Ich betreibe Docker-Container mit Nginx:

docker run --name nginx-cache \ 
    -v /nginx.conf:/etc/nginx/nginx.conf \ 
    -v /nginx/html1:/var/www/html/site1 \ 
    -v /nginx/html2:/var/www/html/site2 \ 
    -v /sites-enabled:/etc/nginx/sites-enabled/ \ 
    --link php5 --link php7 -d -p 9999:80 nginx 

mit nginx.conf:

user nginx; 
worker_processes 1; 

error_log /var/log/nginx/error.log warn; 
pid  /var/run/nginx.pid; 

events { 
    worker_connections 1024; 
} 

http { 
    sendfile on; 

    gzip    on; 
    gzip_http_version 1.0; 
    gzip_proxied  any; 
    gzip_min_length 500; 
    gzip_disable  "MSIE [1-6]\."; 
    gzip_types  text/plain text/xml text/css 
         text/comma-separated-values 
         text/javascript 
         application/x-javascript 
         application/atom+xml; 
    gzip_disable  "msie6"; 


    ## 
    # Basic Settings 
    ## 

    server_names_hash_bucket_size 64; 

    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 
    client_body_buffer_size 128k; 

    include /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    ## 
    # Logging Settings 
    ## 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 

    ## 
    # Virtual Host Configs 
    ## 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 

} 

mit site1 config:

server { 
     listen 80 default_server; 

     server_name site1; 

     root /var/www/html/site1/; 
     index index.php index.html index.htm default.html default.htm; 

     fastcgi_buffers 8 16k; 
     fastcgi_buffer_size 32k; 
     fastcgi_read_timeout 180; 

     location ~ \.php$ { 
      fastcgi_pass php5:9001; 
      fastcgi_index index.php; 
      include fastcgi_params; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      fastcgi_param SERVER_NAME $server_name; 
     } 
} 

und site2 config:

server { 
     listen 80; 

     server_name site2; 

     root /var/www/html/site2/; 
     index index.php index.html index.htm default.html default.htm; 

     fastcgi_buffers 8 16k; 
     fastcgi_buffer_size 32k; 
     fastcgi_read_timeout 180; 

     location ~ \.php$ { 
      fastcgi_pass php7:9000; 
      fastcgi_index index.php; 
      include fastcgi_params; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      fastcgi_param SERVER_NAME $server_name; 
     } 
} 

Diese Anfrage site2 200 OK mit der richtigen Antwort:

curl -X GET \ 
    http://localhost:9999/index.php \ 
    -H 'host: site2' 

Und für die Anfrage an SITE1 :

curl -X GET \ 
    http://localhost:9999/index.php \ 
    -H 'host: site1' 

In der Nginx Behälter logs ich sehe immer:

2017/04/26 21:18:27 [Fehler] 7 # 7: * 1 connect() fehlgeschlagen ist (111: Verbindung zurückgewiesen), während Verbindungs zu Upstream, Client: 172.17.0.1, Server: Site1, Anforderung: "GET /index.php HTTP/1.1", Upstream: "fastcgi: //172.17.0.3: 9001", Host: "site1"

Irgendwelche Ideen, wie Sie dies beheben können, würden sehr geschätzt werden.

Antwort

3

Ok, ich habe es gelöst, ziemlich Dummy-Fehler. Ich aus irgendeinem Grund angenommen, dass, wenn ich den Port 9001 wie folgt ausgesetzt:

docker run --name php5 \ 
    -v /html1:/var/www/html/site1 \ 
    -d -p 9001:9000 php:5.6-fpm 

dann dieser Port 9001 sollte in Nginx Behälter verwendet werden, die mit dem anderen php5 Behälter verbunden ist. Dies ist falsch, da die offengelegte Netzwerkverbindung anders ist als die verknüpfte.

Also die richtige site1 Config sollte so sein (der Hafen ist auch 9000):

server { 
     listen 80 default_server; 

     server_name site1; 

     root /var/www/html/site1/; 
     index index.php index.html index.htm default.html default.htm; 

     fastcgi_buffers 8 16k; 
     fastcgi_buffer_size 32k; 
     fastcgi_read_timeout 180; 

     location ~ \.php$ { 
      fastcgi_pass php5:9000; # <-- BOOOM! 
      fastcgi_index index.php; 
      include fastcgi_params; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      fastcgi_param SERVER_NAME $server_name; 
     } 
}