Docker + PhpStorm 環境でXdebugのリモートデバッグが使えるようにするためのメモ

PHPデバッグには、Xdebugを使っていますが、いつも設定の仕方を忘れてしまうのでメモしておきます。

環境

  • Mac
  • Docker(Docker Desktop for Mac, Docker Machineどちらでも)
  • PhpStorm

Docker側の設定

peclXdebugをインストールします。

Dockerfileに以下の内容を追加し、xdebugをインストールします。

RUN pecl install xdebug

php.iniに以下の内容を追加します。

[xdebug]
zend_extension="/usr/lib64/php/modules/xdebug.so" # 環境に応じて、xdebug.soが置いてある場所を指定します。
xdebug.remote_enable = On
xdebug.remote_autostart = Off
xdebug.remote_connect_back = Off
xdebug.remote_log="/tmp/xdebug.log"
xdebug.remote_port=9001
xdebug.remote_host=host.docker.internal

ポイント

* デフォルトでは、XdebugをOffにし、使いたい人だけ、環境変数 XDEBUG_CONFIGremote_enable=On をセットするようにして有効化するようにします。 * XDEBUG_SESSION_START という名前のパラメータを渡すことで任意のタイミングでリモートデバッグを有効化できました。 ※ xdebug.remote_autostart を Offにする必要あり。https://xdebug.org/docs/remote#browser_session

  • remote_portはバッティングしないようなportを設定するのが良いです。
  • remote_hostは環境に合わせて、PhpStormのデバッグポートを待ち受けているホスト側のIPアドレス、もしくはホスト名を指定します。

そのほか、各設定内容は以下をご確認ください。 https://xdebug.org/docs/remote

PhpStorm側の設定

  • 環境設定 => 言語 & フレームワーク => PHP => サーバ を選択
    • ホスト: _
    • ポート: 環境に応じて設定
    • デバッガ: Xdebug
    • パス・マッピングの設定: 環境に応じて設定
  • 環境設定 => 言語 & フレームワーク => PHP => デバッグ を選択
    • 3.PHPデバッグ接続のリスニングを使用可能にするリスニングを開始 を選択
    • デバッグ・ポートを xdebug.remote_port で設定した値に合わせて設定
    • 一度PhpStormの再起動が必要かも

lsofコマンドで、設定したポートで待ち受けているか確認

$ lsof -i:9001
COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
phpstorm 8875 takapi  467u  IPv4 0x5054b8bd5948d975      0t0  TCP *:etlservicemgr (LISTEN)

ここで、適当な場所に、ブレークポイントを置いてステップ実行できれば完了です。 もし、できていなかったら、xdebug.remote_log で設定したログを見てみると良さそうです。