Da ist meine 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
Und in der site.conf schreibe ich wie folgt: fastcgi_pass unix:/var/run/php7-fpm.sock;
Ich ändere auch die Abhöradresse auf listen = /var/run/php7-fpm.sock
in www.conf. Und in meinem MAC gibt es eine Datei mit dem Namen php7-fpm.sock im Ordner/private/var/run mit dem Modus 666
Nachdem ich docker-compose up -d
ausgeführt habe, wurde der Container erfolgreich ausgeführt. Als ich jedoch http: // localhost: 8018 besuchte, gab es 502 zurück. Nachdem ich das nginx-Fehlerprotokoll überprüft hatte, fand ich dies heraus
2017/11/01 13:08:39 [Fehler] 6 # 6: * 1 connect () to unix: /var/run/php7-fpm.sock fehlgeschlagen (111: Verbindung verweigert) beim Herstellen einer Verbindung zum Upstream, Client: 172.18 .0.1, Server: localhost, Anforderung: "GET/HTTP/1.1", Upstream: "fastcgi: // unix: /var/run/php7-fpm.sock:", Host: "localhost: 8018"
Übrigens, bevor ich versuchte, den Unix-Socket-Modus zu verwenden. Es gelingt mir, http: // localhost: 8018 im TCP/IP-Modus aufzurufen.
Nachdem ich die Datei Wie richte ich Apache2 und PHP-FPM über den Unix-Socket ein? Überprüft habe, habe ich meine docker-compose.yml in geändert
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:
Und überschreiben Sie die zz-docker.conf nach
[global]
daemonize = no
[www]
listen = /var/run/php7-fpm.sock
listen.mode = 0666
Als ich schließlich http: // localhost: 8018 besuchte, erschien die phpinfo-Seite!
Ich denke, das Problem ist, dass Sie versuchen, Volumes mit Ihrem php7-fpm.sock
freizugeben.
Entfernen Sie alle freigegebenen Volumes für /private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock
Verweisen Sie stattdessen auf den Service-Hostnamen in Ihrer nginx-Host-Konfigurationsdatei.
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass php:9000;
}
Insbesondere bezieht sich der Hinweis php:9000
auf den Port 9000 des dynamischen Hostnamens Ihres PHP-Dienstes, der für jeden anderen Container im Netzwerk auflösbar ist.