- DockerFileで以下内容を記述
...なんやかんや RUN apt install -y php8.1-xdebug ...なんやかんや
(DockerFileのお作法的には、他のapt installしているものと一緒にまとめるべきですが、そういうのは動いてから調整すればいいと思うので)
- コンテナのphp.iniに以下設定を追加
[XDebug] xdebug.client_host = host.docker.internal xdebug.client_port = 9003 xdebug.mode = debug xdebug.start_with_request = yes
※重要なポイントは、「host.docker.internal」です。 これはDocker For Desktopでしか使えないらしいのですが、「dockerコンテナから見たホストPCのIP」に適宜変換してくれるもののようです。 xdebugの動いている環境(dockerコンテナ)から見たクライアント(xdebugの利用者)とは、 VSCodeを動かしてる環境(ホストPC)ということで、これを指定します。
{ "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9003, "pathMappings": { "【コンテナのプロジェクトのディレクトリ】":"${workspaceRoot}【VSCodeのルートディレクトリから、プロジェクトのディレクトリへの相対パス】" } } ] }
※pathMappingsは、xdebugの設定でおなじみの、コンテナのディレクトリとxdebugのクライアント側のディレクトリのマッチング設定を記述します。
たとえば、
apache2を動かしているコンテナ(xdebugのサーバーが動いているコンテナ)のプロジェクトのディレクトリが/var/www/html/laravel
の場合
かつ
ホスト(xdebugのクライアント)でVSCodeを動かしていて、VSCodeで開いているソースのルートディレクトリが/foo/bar/src
で、/foo/bar/src/laravel
にプロジェクトのソースを配置している場合は、
"pathMappings": { "/var/www/html/laravel":"${workspaceRoot}/laravel" }
となります。${workspaceRoot}は文字通り、VSCodeのワークスペースのルート(/foo/bar/src)に変換されるようです。
- コンテナを再作成する(イメージ再ビルドして、コンテナを立ち上げる)
docker-compose down docker-compose build docker-compose up -d