如何通过unix socket设置Apache2和PHP-FPM?

时间:2017-09-18 06:26:45

标签: php apache sockets docker docker-compose

我尝试通过unix socket设置Apache2和PHP-FPM但结果是

(111)拒绝连接:AH02454:FCGI:尝试连接到Unix域套接字/run/php/php7.2-fpm.sock(*)失败

搬运工-compose.yml

version: "2"
services:
    php:
        build: "php:7.2-rc-alpine"
        container_name: "php"
        volumes:
            - "./code:/usr/local/apache2/htdocs"
            - "./php7.2-fpm.sock:/run/php/php7.2-fpm.sock"
    apache2:
        build: "httpd:2.4-alpine"
        container_name: "apache2"
        volumes:
            - "./code:/usr/local/apache2/htdocs"
            - "./php7.2-fpm.sock:/run/php/php7.2-fpm.sock"
        ports:
            - 80:80
        links:
            - php

www.conf

listen = /run/php/php7.2-fpm.sock

的httpd-vhosts.conf

<FilesMatch \.php$>
    SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch>

但是通过TCP连接时它可以工作。

www.conf

listen = 127.0.0.1:9000

的httpd-vhosts.conf

<FilesMatch \.php$>
    SetHandler "proxy:fcgi://php:9000"
</FilesMatch>

1 个答案:

答案 0 :(得分:3)

好吧,所以回购有助于解决这个问题。

问题#1 - www.conf被复制到apache容器

你的apache容器Dockerfile中有以下语句

COPY ./www.conf /usr/local/etc/php-fpm.d/www.conf

这实际上是针对将运行php-fpm的php容器而不是apache容器

问题#2 - 永远不会创建套接字

您的卷绑定- "./php7.2-fpm.sock:/run/php/php7.2-fpm.sock"正在创建套接字,并且它们不是由php-fpm创建的。所以你创建了一个空白文件并尝试连接它不会做任何事情

问题#3 - 在php中没有配置来创建套接字

默认情况下,docker容器会在fpm容器中创建监听0.0.0.0:9000。您需要覆盖容器内的zz-docker.conf文件来解决问题。

ZZ-docker.conf

[global]
daemonize = no

[www]
listen = /run/php/php7.2-fpm.sock
listen.mode = 0666
更新了docker文件
FROM php:7.2-rc-fpm-alpine

LABEL maintainer="Eakkapat Pattarathamrong (overbid@gmail.com)"
RUN docker-php-ext-install \
        sockets

RUN set -x \
        && deluser www-data \
        && addgroup -g 500 -S www-data \
        && adduser -u 500 -D -S -G www-data www-data

COPY php-fpm.d /usr/local/etc/php-fpm.d/

问题#4 - 套接字被共享为托管的卷

您应该使用命名卷共享套接字,因此套接字不应该在主机上。

更新了docker-compose.yml
version: "2"
services:
    php:
        build: "./php"
        container_name: "php"
        volumes:
            - "./code:/usr/local/apache2/htdocs"
            - "phpsocket:/run/php"
    apache2:
        build: "./apache2"
        container_name: "apache2"
        volumes:
            - "./code:/usr/local/apache2/htdocs"
            - "phpsocket:/run/php"
        ports:
            - 7080:80
        links:
            - php
volumes:
  phpsocket:

解决了所有问题后,我能够让php页面正常工作

PHP-FPM