Eak*_*ong 1 php sockets apache docker docker-compose
我尝试通过 unix 套接字设置 Apache2 和 PHP-FPM,但结果是
(111)连接被拒绝:AH02454:FCGI:尝试连接到Unix域套接字/run/php/php7.2-fpm.sock(*)失败
docker-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
Run Code Online (Sandbox Code Playgroud)
配置文件
listen = /run/php/php7.2-fpm.sock
Run Code Online (Sandbox Code Playgroud)
httpd-vhosts.conf
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
但是当通过 TCP 连接时它是有效的。
配置文件
listen = 127.0.0.1:9000
Run Code Online (Sandbox Code Playgroud)
httpd-vhosts.conf
<FilesMatch \.php$>
SetHandler "proxy:fcgi://php:9000"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
Okie,所以 repo 帮助解决了这个问题。
问题 #1 - www.conf 被复制到 apache 容器中
您的 apache 容器 Dockerfile 中有以下语句
COPY ./www.conf /usr/local/etc/php-fpm.d/www.conf
Run Code Online (Sandbox Code Playgroud)
这实际上适用于将运行 php-fpm 而不是 apache 容器的 php 容器
问题 #2 - 套接字从未被创建
您的卷绑定- "./php7.2-fpm.sock:/run/php/php7.2-fpm.sock"正在创建套接字,而它们不是由 php-fpm 创建的。所以你创建了一个空白文件并尝试连接到它不会做任何事情
问题 #3 - php 中没有配置来创建套接字
docker 容器默认0.0.0.0:9000在 fpm 容器内创建监听。您需要覆盖zz-docker.conf容器内的文件来解决问题。
[global]
daemonize = no
[www]
listen = /run/php/php7.2-fpm.sock
listen.mode = 0666
Run Code Online (Sandbox Code Playgroud)
更新了 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/
Run Code Online (Sandbox Code Playgroud)
问题 #4 - 套接字作为卷共享给主机
您应该使用命名卷共享套接字,因此该套接字根本不应位于主机上。
更新 docker-compose.ymlversion: "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:
Run Code Online (Sandbox Code Playgroud)
解决所有问题后,我能够使 php 页面正常工作
| 归档时间: |
|
| 查看次数: |
8949 次 |
| 最近记录: |