docker 内のcakephp ローカルサーバにアクセスできない時

超小ネタ。docker 内に cakephp 5 を入れてとりあえず面倒なので、Webサーバなしで軽く試そうと思い cake のローカルサーバを起動するも外部からアクセスできない現象に遭遇した。

もちろん docker -p や docker-compose.yml ports は正しく構成しています。

答えは、コンテナ内でローカルサーバを起動した画面にすでにありました。

; app に cakephp5 をインスールしています。ご自分の環境に読み替えてください。
# app/bin/cake  server 

Welcome to CakePHP v5.0.6 Console
-------------------------------------------------------------------------------
App : src
Path: /var/www/app/src/
DocumentRoot: /var/www/app/webroot
Ini Path: 
-------------------------------------------------------------------------------
built-in server is running in http://localhost:8765/
You can exit with `CTRL-C`
[Sun Mar 24 10:27:49 2024] PHP 8.3.3 Development Server (http://localhost:8765) started

cake server が localhost にバインドしているので、外からはアクセスできない状態ってことを暗に示しています。

これを動作するようにするには、0.0.0.0 にバインドします。お好みで -p でポートを変更してもいい。

# app/bin/cake server -H 0.0.0.0 

考えてみれば当たり前のことで、 Docker はホストとは別のネットワークを生成します。この時、コンテナ内の localhost へアクセスできません。 0.0.0.0 にバインドするってことは、コンテナにあるすべての NIC で待受することになるので、アクセスできるようになったってことだと思われる。