phpとdocker-compose環境でのxdebugの構成 (更新)
開発環境がいろいろと代わり以前確認用に作成したxdebugプロジェクトが動作しなくなっていたため更新しました。
原因としては
使用環境
- phpstorm
- docker
- php-fpm , nginx
mac book の更新
m1チップの影響でdockerのバージョンをプレビュー版を使用している状態です。正式に対応しているわけではないため、以前の構成では動かない部分があるみたいです。
The DNS name host.docker.internal only works if you add --add-host=host.docker.internal:host-gateway to the docker run command
いずれ必要なくなるのかわかりませんが、設定をかえることで動作するためdocker-composeに設定を追加しました。
extra_hostsを追加
extra_hosts: - "host.docker.internal:192.168.10.7" # 192.168.10.7の部分は自分のローカルIP
xdebugのバージョンアップ
2020-11-25にxdebug3がリリースされています。通常のコマンドでxdebugをインストールすると最新版がインストールされるみたいでxdebug3系がインストールされていました。
Dockerfileでのインストールコマンド
RUN pecl install xdebug \ && docker-php-ext-enable xdebug
2系から3系になると、いままでのxdebugの設定が変わるため動作しなくなっていました。
自分は下記のように設定を変更しました。
; xdebug 2 xdebug.idekey = "PHPSTORM" xdebug.remote_autostart= 1 xdebug.remote_connect_back = 0 xdebug.remote_enable = 1 xdebug.remote_host=host.docker.internal xdebug.remote_port=9001
; xdebug 3 xdebug.mode = develop,debug xdebug.start_with_request=yes xdebug.discover_client_host = 0 xdebug.idekey = "PHPSTORM" xdebug.client_host=host.docker.internal xdebug.client_port=9001
またxdebugのバージョンを指定してインストールしたい場合はDockerfileでの指定を変更します。
RUN pecl install xdebug-2.9.8 \ && docker-php-ext-enable xdebug
今回のエラー内容
I: Connecting to configured address/port: host.docker.internal:9001. E: Could not connect to client. :-(
docker側の設定でIP解決できていなかったため、エラーになっていました。docker-composeにextra_hostsを追加して対応。
Xdebug: [Config] The setting 'xdebug.remote_enable' has been renamed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#changed-xdebug.remote_enable (See: https://xdebug.org/docs/errors#CFG-C-CHANGED)
xdebugのバージョンに対応するようにphp.iniを変更して対応。
動作することを確認
設定を変更することで、ステップ実行できることを確認しました。
変更した内容以外は以前作成した記事の内容で問題ありませんでした。
1日ぐらい調査に時間がかかってしまいましたが、複数条件が重なると難しいですね。