надеюсь, что вы сможете помочь.Почему 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-адреса контейнера было прекрасным, но я не хочу опускать этот маршрут. В любом случае это не важно.
Они могут, поэтому они должны быть в вашей сетевой конфигурации. – Devon
Спасибо @Devon Я думал, что они должны уметь. Я буду обновлять, когда я его разрешу. ура – iomdesign