phpのデバッグをすることがあり、自分の環境とぴったりの記事が見つからなかったので何番煎じか分かりませんが残しておきます。
環境
vscode
macOS: 15.2
Docker: 27.4.0
php: 7.4
phpアプリはdocker コンテナ内で動いています
手順
コンテナ作成時
コンテナ側へのコピー用にxdebug.iniを作成
./xdebug.ini
xdebug.client_host = host.docker.internal # mac以外だと変わるかも
xdebug.start_with_request = yes
xdebug.mode = debug
xdebug.client_port = 9003 # ここはlaunch.json(後述)のポートと合わせる
xdebug.log = /var/log/xdebug.log
Dockerfileに以下を追記
COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
# xdebugのバージョンはhttps://xdebug.org/docs/compatで確認
RUN pecl install xdebug-3.1.6 && docker-php-ext-enable xdebug
(確認)
コンテナ立ち上げ後にコンテナ内で以下を確認します
# xdebug.iniが認識されていることを確認
$ php --ini
# (略)
/usr/local/etc/php/conf.d/xdebug.ini
# xdebugが実行されているかを確認(with Xdebugがあるかどうか)
$ php --version
PHP 7.4.3 (cli) (built: Feb 26 2020 12:03:25) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Xdebug v3.1.6, Copyright (c) 2002-2022, by Derick Rethans
デバッグ方法
launch.json
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
# コンテナ側とホスト側のソースファイルのパスが一致するようにします。
"/var/www/html/src": "./src"
},
"log": true
}
]
}
vscodeのデバッグ機能で"Listen for Xdebug"を実行しておきます。
あとはホスト側のvscodeでブレークポイントを設定するだけです。
複数のコンテナを動かしている場合はそれぞれポート番号を変えて並列でデバッグを動かします。