kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

phpとdocker-compose環境でのxdebugの構成 (更新)

開発環境がいろいろと代わり以前確認用に作成したxdebugプロジェクトが動作しなくなっていたため更新しました。

原因としては

  • mac book の更新( m1 チップの影響 )
  • xdebugのバージョンアップ ( 2 -> 3系 )

使用環境

  • phpstorm
  • docker
  • php-fpm , nginx

mac book の更新

m1チップの影響でdockerのバージョンをプレビュー版を使用している状態です。正式に対応しているわけではないため、以前の構成では動かない部分があるみたいです。

docs.docker.com

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.org

自分は下記のように設定を変更しました。

; 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日ぐらい調査に時間がかかってしまいましたが、複数条件が重なると難しいですね。

kazu22002.hatenablog.com

github.com