1

Windows 10 で Windows用の最新の安定したDocker デスクトップを実行しています。

Centos 6 と SCL をベースに、httpd24-httpd (Apache) 用と rh-php56-php-fpm (PHP-FPM) 用に 1 つずつ、別々のコンテナーをビルドするdocker-composeファイル (以下を参照) を作成しました。コンテナーは正常に起動し、サービスは 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>

mod_proxy、mod_proxy_http、および mod_proxy_fcgi は Apache によってロードされています。

PHP-FPM も明らかに構成されています。私は通常、これをポートでリッスンするように設定しまし9000たが、試してみました:::9000

development.php.dockerfile のビルド中に、以下を追加しました。

EXPOSE 9000

そして、構成ファイルでわかるように、httpd は phpfpm にリンクされているため、私の推測では、それらは相互に完全に認識されている必要があり、apache は phpfpm:9000 に到達できるはずです。

なぜこれが機能しないのか、誰か助けてもらえますか?? それは私をひねりに駆り立てています。大変感謝します。

docker-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
      - 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 が conf ファイルのディレクトリを 2 つ作成していました。/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 = httpdBroken pipe AH01074 Apache エラーが発生していたので、私も削除しました。コンテナー IP の使用は問題ありませんでしたが、そのルートをたどりたくありません。どちらにしても重要ではありません。

4

1 に答える 1

0

問題は解決された。

構成はすべて正しかったのですが、間違った www.conf ファイルを変更していました。rh-php56-php-fpm は conf ファイルの 2 つのディレクトリを作成しました。/etc/opt/rh/rh-php56/php-の代わりに/opt/rh/rh-php56/register.content/etc/opt/rh/rh-php56/php-fpm.d/www.confを変更していましたサービスで使用されたfpm.d/www.conf

于 2016-12-28T15:44:30.113 に答える