为什么apache不能使用Docker Desktop for Windows在不同的容器中与php-fpm进行通信?

时间:2016-12-23 18:16:53

标签: php apache docker docker-compose docker-desktop

我在Windows 10上运行最新稳定的 Docker Desktop for Windows

我已经编写了一个docker-compose文件(见下文),它构建了单独的容器,基于带有SCL的Centos 6,一个用于httpd24-httpd(Apache),另一个用于rh-php56-php-fpm (PHP-FPM)。容器启动正常,服务报告OK状态。如果我从另一个容器中ping一个容器就可以解决它。如果我访问index.html页面,Apache很高兴并提出来。

Apache目前设置为使用proxy:fcgi:phpfpm:9000,但如果我尝试加载php文件,Apache会返回503错误。我尝试了许多不同的连接选项,例如proxy:fcgi:127.0.0.1:9000 -- 0.0.0.0:9000 -- 172.20.0.3:9000(这是来自docker的phpfpm ip),但Apache只是记录:

  

[proxy:error] [pid 60:tid ...](...)拒绝连接:AH00957:FCGI:   尝试连接到172.20.0.3:9000(*)失败[proxy_fcgi:error]   [pid 60:tid ...] [客户172.20.0.1:44546] AH01079:未能成功   连接到后端:...

我也尝试过使用proxypassmatch但仍然没有快乐。

 <IfModule proxy_module>
   ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1
 </IfModule>
Apache正在加载

mod_proxy,mod_proxy_http和mod_proxy_fcgi。

显然还在配置PHP-FPM。我通常会将此设置为侦听端口9000,但也尝试:::9000

在develop.php.dockerfile的构建过程中,我添加了:

EXPOSE 9000

并且,正如你在compose文件中看到的那样,httpd链接到phpfpm所以通过我的计算,他们应该完全了解彼此,并且apache应该能够达到phpfpm:9000

任何人都可以帮我解决一下为什么这不起作用?它驱使我绕过扭曲。非常感谢。

搬运工-撰写:

version: '2'

services:
  httpd:
    build:
      context: .
      dockerfile: ./docker/development.httpd.Dockerfile
    environment:
      - APACHE_RUN_USER=apache
      - APACHE_RUN_GROUP=apache
      - APACHE_LOG_DIR=/var/log/httpd24
      - APACHE_RUN_DIR=/opt/rh/httpd24/root/var/run/httpd
      - APACHE_LOCK_DIR=/opt/rh/httpd24/root/var/lock
      - APACHE_SERVERADMIN=admin@mtf8.bar
      - APACHE_SERVERNAME=foo.bar
      - APACHE_SERVERALIAS="foo.foo.bar www.foo.bar"
      - APACHE_DOCUMENTROOT=/var/www/html
    volumes:
      - ./data/www/html:/var/www/html
    ports:
      - "10180:80"
    tty: true
    networks:
      - front-tier
  phpfpm:
    build:
      context: .
      dockerfile: docker/development.php.Dockerfile
    environment:
      - PHPFPM_RUN_USER=apache
      - PHPFPM_RUN_GROUP=apache
      - PHPFPM_LISTEN=9000
      - PHPFPM_PM=dynamic
      - PHPFPM_PM_MAX_CHILDREN=50
      - PHPFPM_PM_START_SERVERS=5
      - PHPFPM_PM_MIN_SPARE_SERVERS=5
      - PHPFPM_PM_MAX_SPARE_SERVERS=35
      - PHPFPM_LOG_DIR=/var/log/rh-php56-php-fpm
    volumes:
      - ./data/www/html:/var/www/html
    tty: true
    networks:
      - front-tier
      - back-tier
  mysql:
    build:
      context: .
      dockerfile: docker/development.mysql.Dockerfile
    volumes:
      - ./data/db:/usr/tmp/db/
      - mysql:/var/lib/mysql
    expose:
      - 3306
    ports:
      - "10133:3306"
    tty: true
    networks:
      - back-tier
volumes:
  mysql:
networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge

www.conf

[...]
user = apache
group = apache
listen = 9000
listen.allowed_clients = httpd
[...]

00-custom.conf

[...]
<VirtualHost *:80>
[...]
        <Directory "/var/www/html">
            Options -Indexes +FollowSymlinks +MultiViews
            AllowOverride All
            Require all granted
        </Directory>
         <FilesMatch \.php$>
              SetHandler "proxy:fcgi://php:9000"
         </FilesMatch>
[...]
</VirtualHost>

更新 问题出在PHP-FPM配置文件中。我没有意识到这一点,但SCL的rh-php56-php-fpm正在创建2个conf文件目录。我正在修改/opt/rh/rh-php56/register.content/etc/opt/rh/rh-php56/php-fpm.d/www.conf但该服务正在使用/ etc / opt / rh / rh-php56 /php-fpm.d/www.conf

我应该清楚问题中的完整文件路径!

我还删除了listen.allowed_clients = httpd,因为它导致了一个Broken pipe AH01074 Apache错误。使用集装箱IP很好,但我不想沿着那条路走下去。无论哪种方式都不重要。

1 个答案:

答案 0 :(得分:0)

问题已解决。

配置都正确但我正在修改错误的www.conf文件。 rh-php56-php-fpm创建了2个conf文件目录。我正在修改 /opt/rh/rh-php56/register.content/etc/opt/rh/rh-php56/php-fpm.d/www.conf 而不是 / etc /服务使用的opt / rh / rh-php56 / php-fpm.d / www.conf