WSL2上のUbuntuで動いているDockerコンテナ動かしていたら、こんな感じのエラーになりました。
PHP message: Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: host.docker.internal
phpの設定は以下
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
xdebug.mode=debug
xdebug.start_with_request = yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
この設定のようにxdebug.client_hostを設定すると、PHPが動いたときに指定したホストに接続しに行きます。
すべてローカルで作業している場合、ブラウザでアクセスしたときのHOSTに接続が行くのですが、VSCodeをWSL2中で動かした場合は、ブラウザとは別のPC扱いになるのでそれができません。ということでxdebug.client_hostを設定するしかないのです。
因みに、host.docker.internalはDockerコンテナ内から見たホストPCのアドレスです。
ですが、VSCodeでデバッガを動かしていても反応がありませんでした。
原因はVSCode側のデバッガの設定(lanch.json)設定でした。
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"hostname": "0.0.0.0",
"pathMappings": {
"/var/www":"/work/project/src"
}
},
ポイントとしては、hostnameで0.0.0.0を指定してあげないといけないようです。
だれでもうけつけるよという状態ではないようで接続元を指定してあげないといけないようです。
0.0.0.0を指定すると、だれでも接続OKという意味になるそうです。
Docker内のIPアドレスはランダムなので(設定で固定化もできるらしい)とりあえず、0.0.0.0としておくとよいでしょう。