WSL+DockerでのPHPデバッグ方法
WSL Docker上に構築したPHPコンテナをWindows上のVSCodeからデバッグする方法。
環境
◆ Windows 11 25H2 (26200.8037) + WSL + Docker
◆ WSL:
PHP環境は過去記事「Docker 学習 #4:Docker Composeを学ぶ」で作成したPHPコンテナを使用する。
◆ WSL:
PS C:\Users\xxx> wsl --version
WSL バージョン: 2.3.24.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26200.8037
◆ Ubuntu:WSL バージョン: 2.3.24.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26200.8037
xxx@xxx:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
PHP環境は過去記事「Docker 学習 #4:Docker Composeを学ぶ」で作成したPHPコンテナを使用する。
手順
1. PHPコンテナに接続
実行結果:
2. PHPコンテナにxdebugをインストール
docker exec -it (CONTAINER ID) /bin/bash
※ (CONTAINER ID)は "docker ps" コマンドで確認。実行結果:
xxxxxxxx@yyyy:~/docker/php$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
73b35c593dd3 php:8.3-apache "docker-php-entrypoi…" 5 seconds ago Up 5 seconds 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp php-php-1
0fcfeb63acfd mysql:8.0 "docker-entrypoint.s…" 5 seconds ago Up 5 seconds 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp php-db-1
ee1128843dec phpmyadmin/phpmyadmin "/docker-entrypoint.…" 5 seconds ago Up 5 seconds 0.0.0.0:8081->80/tcp, [::]:8081->80/tcp php-phpmyadmin-1
xxxxxxxx@yyyy:~/docker/php$ docker exec -it 73b35c593dd3 /bin/bash
root@73b35c593dd3:/var/www/html#
2. PHPコンテナにxdebugをインストール
PHPコンテナにて以下コマンドを実行
実行結果:
続いて以下コマンドを実行
実行結果:
3. xdebug.ini作成
4. xdebug.iniをコンテナへコピー
5. compose.yaml修正
6. コンテナ再起動
6. VSCodeにPHP Debug拡張機能をインストール
7.デバッグできない・・
WSL(Ubuntu)のIPアドレスを調べる。
実行結果:
8. debug.ini修正
9. コンテナ再起動
10. デバッグ実行
pecl install xdebug
実行結果:
root@73b35c593dd3:/var/www/html# pecl install xdebug
downloading xdebug-3.5.1.tgz ...
Starting to download xdebug-3.5.1.tgz (282,739 bytes)
:
Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20230831/xdebug.so'
install ok: channel://pecl.php.net/xdebug-3.5.1
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20230831/xdebug.so" to php.ini
続いて以下コマンドを実行
docker-php-ext-enable xdebug
実行結果:
root@73b35c593dd3:/var/www/html# docker-php-ext-enable xdebug
3. xdebug.ini作成
WSL(Ubuntu)にxdebug.iniを作成する。
保存場所は compose.yaml と同じ階層(~/docker/php)とした。
保存場所は compose.yaml と同じ階層(~/docker/php)とした。
[xdebug]
xdebug.mode=debug
xdebug.start_with_request=yes
; VSCode側へ接続する
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
; ログ(トラブル時)
xdebug.log=/tmp/xdebug.log
4. xdebug.iniをコンテナへコピー
WSL(Ubuntu)にて以下コマンドを実行しxdebug.iniをコンテナにコピーする。(CONTAINER ID)は "docker ps" コマンドで確認。
実行結果:
docker cp ./xdebug.ini (CONTAINER ID):/usr/local/etc/php/conf.d/xdebug.ini
実行結果:
xxxxxxxx@yyyy:~/docker/php$ docker cp ~/docker/php/xdebug.ini 73b35c593dd3://usr/local/etc/php/conf.d/xdebug.ini
Successfully copied 209B (transferred 2.05kB) to 73b35c593dd3://usr/local/etc/php/conf.d/xdebug.ini
5. compose.yaml修正
compose.yamlに以下記述を追加する。
※参考:現在のcompose.yaml
extra_hosts:
- "host.docker.internal:host-gateway"
※参考:現在のcompose.yaml
services:
php:
image: php:8.3-apache
volumes:
- ./www/html:/var/www/html
- ./prophp_sample:/var/www/prophp_sample
- ./php.ini-debug:/usr/local/etc/php/php.ini
- ./prophp_sample.conf:/etc/apache2/conf-available/prophp_sample.conf
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "8080:80"
command: >
sh -c "a2enconf prophp_sample && apache2-foreground"
db:
image: mysql:8.0
volumes:
- ./mysql:/var/lib/mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8081:80"
environment:
PMA_HOST: db
6. コンテナ再起動
WSL(Ubuntu)にて以下コマンドを実行しコンテナを再起動する。
実行結果:
docker compose down
docker compose up -d --build
実行結果:
xxxxxxxx@yyyy:~/docker/php$ docker compose down
[+] down 4/4
✔ Container php-php-1 Removed 10.3s
✔ Container php-phpmyadmin-1 Removed 1.4s
✔ Container php-db-1 Removed 2.0s
✔ Network php_default Removed 0.2s
xxxxxxxx@yyyy:~/docker/php$ docker compose up -d --build
[+] up 4/4
✔ Network php_default Created 0.0s
✔ Container php-php-1 Started 0.3s
✔ Container php-phpmyadmin-1 Started 0.3s
✔ Container php-db-1 Started 0.3s
6. VSCodeにPHP Debug拡張機能をインストール
7.デバッグできない・・
WSL(Ubuntu)のIPアドレスを調べる。
ip route
実行結果:
root@xxx:~/docker/php# ip route
default via 172.25.0.1 dev eth0 proto kernel
:
8. debug.ini修正
PHPコンテナに接続し /usr/local/etc/php/conf.d/xdebug.ini を修正。
vimにて修正しようと思ったが "bash: vim: command not found" になってしまったのでvimをインストール。
実行結果:
xdebug.client_host= の値を先ほど 7. で調べたIPアドレスに変更する。
vimにて修正しようと思ったが "bash: vim: command not found" になってしまったのでvimをインストール。
実行結果:
root@05fa4e42bbcd:/usr/local/etc/php/conf.d# apt install vim
:省略
Processing triggers for libc-bin (2.41-12+deb13u2) ...
"vim /usr/local/etc/php/conf.d.xdebug.ini" コマンドで xdebug.iniを修正xdebug.client_host= の値を先ほど 7. で調べたIPアドレスに変更する。
9. コンテナ再起動
10. デバッグ実行
PHP WSL Docker VSCode デバッグ




0 件のコメント:
コメントを投稿