前提・実現したいこと
開発環境がwindows10proで本番環境がlinuxのため、dockerを利用して開発環境を構築しようと考えました。
vscode上でphpのデバッグ環境を構築したいです。(xdebug使用)
既にローカル開発環境ではdebug環境を構築しています。
https://qiita.com/suzu12/items/35435dd83c247cb9bd66
上記サイトを参考に
Remote Developmentの参照機能でコンテナ内には入れているようですが、
デバッグをステップ実行することができません。
フォルダ構成
. ├── .devcontainer │ └── devcontainer.json// 後述 │ ├── .vscode │ └── launch.json // 後述 │ ├── docker │ ├── Dockerfile// 後述 │ ├── xdebug.ini// 後述 │ ├── php_xdebug.dll// 後述 │ └── php.ini// 後述 ├── docker-compose.yml// 後述 │ └── sample_test.php // デバッグテスト用のファイル
launch.json
{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9000, //"stopOnEntry": true, //"log": true }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9000, //"runtimeExecutable": "C:\xampp\php\php.exe" }, { "name": "XDebug on docker", "type": "php", "request": "launch", "port": 9003, "stopOnEntry": true, "pathMappings": { "/var/www/html": "${workspaceRoot}/" } } ] }
devcontainer.json
{ "name": "php_xdebug_app", // お好きな名前 "dockerComposeFile": [ // docker-compose.ymlのパスを記載 "../docker-compose.yml", ], "service": "php", // docker-compose.yml に記載しているサービス名で起動したいコンテナ "workspaceFolder": "/var/www/html", // 作業するパス "forwardPorts": [ // xdebug.iniに書いたport番号と同じにする 9003 ], "extensions": [ // コンテナ内で使用したい拡張機能、お好みに合わせて設定してください。 "felixfbecker.php-debug", "coenraads.bracket-pair-colorizer-2", "oderwat.indent-rainbow", "streetsidesoftware.code-spell-checker", "mosapride.zenkaku" ] }
Dockerfile
FROM php:7.4-fpm WORKDIR /var/www/html RUN apt-get update \ && apt-get install -y libonig-dev libzip-dev unzip \ # xdebug install && pecl install xdebug \ && docker-php-ext-enable xdebug COPY --from=composer:2 /usr/bin/composer /usr/bin/composer COPY ./app /var/www/html COPY ./docker/php.ini /usr/local/etc/php/php.ini COPY ./docker/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini COPY ./docker/php_xdebug.dll /usr/local/etc/php/php_xdebug.dll #ローカルで使用しているdllをdockerコンテナ内にコピー?
php.ini
[Syslog] define_syslog_variables=Off [Session] define_syslog_variables=Off [Date] date.timezone=Europe/Berlin [MySQL] mysql.allow_local_infile=On mysql.allow_persistent=On mysql.cache_size=2000 mysql.max_persistent=-1 mysql.max_link=-1 mysql.default_port=3306 mysql.default_socket="MySQL" mysql.connect_timeout=3 mysql.trace_mode=Off [Sybase-CT] sybct.allow_persistent=On sybct.max_persistent=-1 sybct.max_links=-1 sybct.min_server_severity=10 sybct.min_client_severity=10 [MSSQL] mssql.allow_persistent=On mssql.max_persistent=-1 mssql.max_links=-1 mssql.min_error_severity=10 mssql.min_message_severity=10 mssql.compatability_mode=Off mssql.secure_connection=Off display_errors = On display_startup_errors = On max_execution_time = 30 session.gc_divisor = 1000 session.sid_bits_per_character = 5 output_buffering = 4096 memory_limit = 128M upload_max_filesize = 64M post_max_size = 64M max_input_vars = 1000 log_errors = On error_log = /dev/stderr error_reporting = E_ALL expose_php = On zend.exception_ignore_args = Off
xdebug.ini
xdebug.client_host = host.docker.internal xdebug.start_with_request = yes xdebug.mode = debug # port 番号はデフォルトで9003番ですがわかりやすいように明示的に書いています。9003ではなくても空いているポートなら大丈夫です。 # 後述する .devcontainer/devcontainer.json に書く port と同じにしてください。 xdebug.client_port = 9003 xdebug.log = /var/log/xdebug.log xdebug.discover_client_host = 1 zend_extension = "ローカルからのパス \docker\php_xdebug.dll"
docker-compose.yml
version: "3.8" services: php: build: context: . dockerfile: docker/Dockerfile volumes: - ./app:/var/www/html ports: - "8000:80" command: sleep infinity
試したこと
①xdebug 3対応
②dllの問題?と思い、xdebug.iniの中にローカルで使用しているddlを追加したりしています。
補足情報(FW/ツールのバージョンなど)
・ Xdebug v3.0.4
・php 8.0.8
・win10 pro
・docker 20.10.11
あなたの回答
tips
プレビュー