web-dev-qa-db-fra.com

comment connecter nginx à php-fpm en utilisant unix socket in docker

Il y a mon docker-compose.yml

version: '2'

services:
    web:
        image: nginx:latest
        ports:
            - "8018:80"
        volumes:
            - ./code:/code
            - ./site.conf:/etc/nginx/conf.d/default.conf
            - /private/var/log/nginx:/var/log/nginx
            - /private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock
        networks:
            - code-network
    php:
        image: php:fpm
        volumes:
            - ./code:/code
            - ./php-fpm.conf:/usr/local/etc/php-fpm.conf
            - ./www.conf:/usr/local/etc/php-fpm.d/www.conf
            - /private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock
        networks:
            - code-network

networks:
    code-network:
        driver: bridge

Et dans le site.conf j'écris comme ceci fastcgi_pass unix:/var/run/php7-fpm.sock;Je change également l'adresse d'écoute en listen = /var/run/php7-fpm.sock dans www.conf. Et dans mon MAC, il y a un fichier nommé php7-fpm.sock dans le dossier/private/var/exécuter avec le mode 666

Après avoir exécuté docker-compose up -d, les conteneurs ont fonctionné avec succès. Mais lorsque j'ai visité http: // localhost: 8018 , il a renvoyé 502. Après avoir consulté le journal des erreurs nginx, j'ai découvert ce

2017/11/01 13:08:39 [erreur] 6 # 6: * 1 connexion () à unix: /var/run/php7-fpm.sock a échoué (111: connexion refusée) lors de la connexion à l'amont, client: 172.18. .0.1, serveur: localhost, requête: "GET/HTTP/1.1", en amont: "fastcgi: // unix: /var/run/php7-fpm.sock:", hôte: "localhost: 8018"

Btw, avant j'ai essayé d'utiliser le mode de socket Unix. Je réussis à visiter http: // localhost: 8018 avec le mode TCP/IP.

4
Liu Wenzhe

Après avoir vérifié le Comment configurer Apache2 et PHP-FPM via un socket? , j'ai changé mon fichier docker-compose.yml en 

version: '2'

services:
    web:
        image: nginx:latest
        ports:
            - "8018:80"
        volumes:
            - ./code:/code
            - ./site.conf:/etc/nginx/conf.d/default.conf
            - /private/var/log/nginx:/var/log/nginx
            - "phpsocket:/var/run"
        networks:
            - code-network
    php:
        image: php:fpm
        volumes:
            - ./code:/code
            - ./php-fpm.conf:/usr/local/etc/php-fpm.conf
            - ./www.conf:/usr/local/etc/php-fpm.d/www.conf
            - ./zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf
            - "phpsocket:/var/run"
        networks:
            - code-network

networks:
    code-network:
        driver: bridge

volumes:
    phpsocket:

Et substituez zz-docker.conf à 

[global]
daemonize = no

[www]
listen = /var/run/php7-fpm.sock
listen.mode = 0666

Enfin, quand j’ai visité http: // localhost: 8018 , la page phpinfo s’est affichée!

4
Liu Wenzhe

Je pense que le problème est que vous essayez de partager des volumes contenant votre php7-fpm.sock

Supprimer tous les volumes partagés pour /private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock

Référencez plutôt le nom d’hôte du service à partir du fichier de configuration de votre hôte nginx.

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass php:9000;
}

En particulier, la remarque php:9000 fait référence au port 9000 du nom d’hôte dynamique attribué à votre service php, qui peut être résolu en tout autre conteneur du réseau.

0
Jeff Puckett