2017-04-26 3 views
1

I exécuter deux conteneurs docker pour PHP5.6:Plusieurs versions de PHP par Nginx dans Docker

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

Et pour PHP7:

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

Je cours avec récipient Docker 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 

avec 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/*; 

} 

avec config site1:

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; 
     } 
} 

et config site2:

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; 
     } 
} 

Cette demande de site2 est 200 OK avec la réponse correcte:

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

Et pour la demande de Site1 :

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

Dans les journaux de conteneurs Nginx Je vois toujours:

2017/04/26 21:18:27 [error] 7 # 7: * 1 connect() a échoué (111: Connexion refusé) lors de la connexion en amont, client: 172.17.0.1, serveur: site1, demande: "GET /index.php HTTP/1.1", en amont: "fastcgi: //172.17.0.3: 9001", hôte: "site1"

Des idées pour résoudre ce problème seraient très appréciées.

Répondre

3

Ok, je l'ai résolu, erreur assez fictive. Pour une raison quelconque, je suppose que si j'expose le port 9001 comme ceci:

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

alors ce port 9001 doit être utilisé dans le récipient Nginx qui est relié à l'autre conteneur de php5. Ceci est faux parce que la connexion réseau exposée est différente de celle liée.

Donc, la bonne config site1 devrait être comme ça (le port est également 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; 
     } 
}