kusanagi-php dockerのバージョンを上げたらERROR: Connection disallowed

公開日時
更新日時

以前KUSANAGI Runs on Dockerを参考にDocker上にWordpress環境を作った。

管理画面を見たらPHPのバージョンが古いのでアップデートしろとの警告が出ていたので、Docker Hubで最新のイメージを確認。

docker-compose.ymlのイメージをlatestに変更して、stop -> upで立ち上げ直した。

  kusanagi-php7:
    image: primestrategy/kusanagi-php:latest

これですんなり動くかなと思っていたが、ページにアクセスするとエラーで見れない。

[[docker-compose logs -f]]でログを確認してみたところ↓のエラーが発生していた。

ERROR: Connection disallowed: IP address 'xxx.xxx.xxx.xxx' has been dropped.

コンテナに入って[[/usr/local/etc/php-fpm.d/www.conf]]を確認してみると↓が有効になっていたのでこれが原因と思われる。

listen.allowed_clients = 127.0.0.1

kusanagi-php/docker-entrypoint.shを確認すると、www.confは起動時に自動生成されるようになっており、allowed_clientsをコメントアウトすることはできずip指定をする必要があった。

幸い、環境変数での指定が許可されていたのでエラーログに出ていたipを追加して、stop -> upで再度立ち上げ直してみたところ、無事に起動できた。

  kusanagi-php7:
    image: primestrategy/kusanagi-php:latest
    environment:
      PHP_ALLOWED: xxx.xxx.xxx.xxx

追記

上記の方法だとコンテナのIPが変わったタイミングで再度エラーになってしまった。

listen.allowed_clientsは,区切りで複数指定ができるもののIP範囲を1個ずつ指定するのも大変なので、www.conf.templateを手元にコピーしてvolume mountを使って上書きすることにした。

# docker-compose.yml
    volumes:
      - ./www.conf.template:/usr/local/etc/php-fpm.d/www.conf.template

↓のようにlisten.allowed_clientsを消して、デフォルト(any)が使用されるようにする。

# before
;listen.allowed_clients = 127.0.0.1
listen.allowed_clients = $PHP_ALLOWED

# after
;listen.allowed_clients = 127.0.0.1

昔からある環境なのでwordpressのまま動かしているが、ゆくゆくは静的ページに置き換えてメンテコストを下げていきたい。


Related #docker

docker-credential-desktop.exe not installed or not available in PATH

rm ~/.docker/config.jsonしたら起動できた

Cloud Datastoreのローカル環境をDockerで構築する

CloudDatastoreエミュレータとgoogle-cloud-guiの環境を構築

Extension fieldsを使ってdocker-composeのコンテナ設定を共通化する

Railsコンテナ設定を共通化して、commandだけそれぞれで変えるようにした

docker-composeコマンドのエイリアスを作る

dcコマンドを置き換えた

Dockerでpt-query-digestを使う

コンテナのおかげで手軽にslowlog分析ができるようになった

mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.

windowsだとvolume mountすると777になるのでDockerfileを作ってcopyするようにした