2016-12-23 2 views
0

надеюсь, что вы сможете помочь.Почему apache не может взаимодействовать с php-fpm в отдельных контейнерах с помощью Docker for Windows?

Я бег последней стабильной Docker для Windows, на Windows, 10.

Я написал Докер-Compose файл (см ниже), который строит отдельные контейнеры, основанную на Centos 6 с SCL, один для httpd24 -httpd (Apache) и один для rh-php56-php-fpm (PHP-FPM). Контейнеры начинают нормально работать со службами, сообщающими статус OK. Если я пингу с контейнером из другого, это прекрасно решает. Если я перейду на страницу index.html, Apache будет счастлив и поднимет ее.

Apache в настоящее время настроен на использование прокси: fcgi: phpfpm: 9000, но если я попытаюсь загрузить файл php, Apache вернет ошибку 503. Я пробовал несколько различных вариантов подключения, например, прокси: fcgi: 127.0.0.1: 9000 - 0.0.0.0:9000 - 172.20.0.3:9000 (это phpfpm ip from docker), однако Apache только регистрирует:

[proxy:error] [pid 60:tid ...] (...)Connection refused: AH00957: FCGI: attempt to connect to 172.20.0.3:9000 (*) failed 
[proxy_fcgi:error] [pid 60:tid ...] [client 172.20.0.1:44546] AH01079: failed to make connection to backend: ... 

Я также пробовал его с помощью proxypassmatch и до сих пор не испытываю радости.

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

mod_proxy, mod_proxy_http и mod_proxy_fcgi загружаются с помощью Apache.

PHP-FPM, очевидно, также настроен. Я вообще имел это просто набор для прослушивания порта 9000 но также попробовать ::: 9000

Во время сборки в development.php.dockerfile я добавил:

EXPOSE 9000 

и, как вы можете видеть в файле компоновки, httpd связан с phpfpm, поэтому, по моему расчёту, они должны обладать полным знанием друг друга, и apache должен иметь возможность достичь phpfpm: 9000

Может кто-нибудь, пожалуйста, помогите мне разобраться, почему это isn ' т работы? Это меня крутит. Большое большое спасибо.

докер-Compose:

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 
     - [email protected] 
     - 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> 

UPDATE Проблема была с файлом конфигурации PHP-FPM. Я этого не понимал, но rh-php56-php-fpm из SCL создавал 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, поскольку это вызывало поврежденную трубку AH01074 Ошибка Apache. Использование IP-адреса контейнера было прекрасным, но я не хочу опускать этот маршрут. В любом случае это не важно.

+0

Они могут, поэтому они должны быть в вашей сетевой конфигурации. – Devon

+0

Спасибо @Devon Я думал, что они должны уметь. Я буду обновлять, когда я его разрешу. ура – iomdesign

ответ

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, который использовался службой.