web-dev-qa-db-de.com

wie man nginx mit php-fpm verbindet, indem man den unix socket im docker benutzt

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.

4
Liu Wenzhe

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!

4
Liu Wenzhe

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.

0
Jeff Puckett