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.
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!
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.