XDebug 3をDockerコンテナ内でPHPデバッグ
私は最近XDebugを開発のセットアップで動作するようになったPhpStorm 走るinside WSL 2 Windows 10では、PHP/XDebugはWSC 2の内部でDockerコンテナ内で動作しますDocker Desktop ), だからここで私は驚くべき簡単な解決策を書いている-部分的に自分の将来の参照のための部分だけでなく、同様の状況で自分自身を見つける人を助けるために.
(私の極端な畳み込みの設定に落胆しないでください.
XDebugは、PHPのアプリケーションに対する要求を送信するのではなく、PHPアプリケーションとの対話に使用されている方法とは逆の動作をするため、構成するトリッキーにすることができます.XDebugは、コードがクライアントアプリケーション(つまり、あなたのエディターまたはIDE)に実行されている場所から要求を送信する方法を知っている必要があります.
あなたのセットアップが比較的単純であるならば、これはすばらしいです
XDebug 3は、XDebugがより簡単にするように設定された方法を一般的にオーバーホールすることによって、この全体の運動を少し簡単にします.しかし、セットアップが少し畳み込まれているならば、それはまだ正しいので、このポストを得ることができます.
さて、ここで私が終わったのです.
これはPHPの設定のどこかに置く必要があるビットです
最後の2行はおもしろいところです.
これらの設定をすべて設定すると、PHPアプリケーションへのリクエストを送信するたびに、どうなりますか XDebugはステップデバッグをアクティブにする XDebugはHTTPリクエストからのホストへの接続を自動的に行います. 上記が動かなかったならば、それは我々に接続しようとすることに逆戻りします XDebugが両方を設定するという事実
あなたがDockerデスクトップを使用しているならば
もしあなたがDockerを使っているなら(そして、あなたがそうでなければ、私はそれについて考えることをお勧めします!)以下は、XDebugを開発中のイメージにインストールせずにインストールする方法の例ですmulti-stage builds :
それだ!これで、XDebugの設定をする必要があります.
あなたがこの設定を使用している場合、それはあなたのTwitter上で私にエールをしてください、私はおそらくこのポストにメモを追加してください、それは動作しませんセットアップを発見した!
(私の極端な畳み込みの設定に落胆しないでください.
前書き
XDebugは、PHPのアプリケーションに対する要求を送信するのではなく、PHPアプリケーションとの対話に使用されている方法とは逆の動作をするため、構成するトリッキーにすることができます.XDebugは、コードがクライアントアプリケーション(つまり、あなたのエディターまたはIDE)に実行されている場所から要求を送信する方法を知っている必要があります.
あなたのセットアップが比較的単純であるならば、これはすばらしいです
localhost:9003
しかし、あなたのセットアップがもう少し複雑であるならば、すなわち、PHP/XDebugが異なる物理的なマシンで、VMで、コンテナの中で、または、同様に動いているならば、それは箱から働きません.XDebug 3は、XDebugがより簡単にするように設定された方法を一般的にオーバーホールすることによって、この全体の運動を少し簡単にします.しかし、セットアップが少し畳み込まれているならば、それはまだ正しいので、このポストを得ることができます.
肉とジャガイモ
さて、ここで私が終わったのです.
これはPHPの設定のどこかに置く必要があるビットです
php.ini
, または通常、PHP拡張モジュールを設定する場所)[Xdebug]
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host=true
xdebug.client_host=host.docker.internal
列によってこの行を行きましょうxdebug.mode=debug
許可step debugging (おそらくxdebugを使いたいものです.xdebug.start_with_request=yes
簡単にするために、すべてのリクエストの開始時にデバッグをアクティブにしたいXDebugに指示します.これを設定することをお勧めしますyes
そして、それを忘れていますが、あなたが以前にこれをしたならば、あなたが特定のリクエストだけのためにステップ・デバッギングを活性化するのを好むということを知っているならば、この行を出てください、そして、XDebugはデフォルトですtrigger
.最後の2行はおもしろいところです.
xdebug.discover_client_host=true
XDebugにHTTPリクエストからクライアントのIPを抽出しようとしますxdebug.client_host
それが動作しない場合に何を試みるかを指示します.これらの設定をすべて設定すると、PHPアプリケーションへのリクエストを送信するたびに、どうなりますか
xdebug.mode
is debug
, and xdebug.start_with_request
がyes
). $_SERVER['REMOTE_ADDR']
, $_SERVER['HTTP_X_FORWARDED_FOR']
, または設定したカスタムHTTPヘッダ).xdebug.client_host
, はhost.docker.internal
, ホストのためのDNS名は、WindowsまたはMacOSの上でDockerデスクトップによって我々のために親切にセットされます(残念ながらLinuxででなく).xdebug.discover_client_host
and xdebug.client_host
フォールバックとして、LinuxではMacOSやWindowsであるかどうか、Dockerを使用しているかどうかを設定するだけで、この設定を行うことができます.あなたがDockerデスクトップを使用しているならば
host.docker.internal
フォールバックホストとして設定されていると、XDebugは常にホストへの道を見つけることができ、他のほとんどのセットアップでは、クライアントxdebug.discover_client_host
) だけで動作します.理論的には、このコンフィグが中断する唯一のシナリオは、dockerではないクライアント発見を中断するもの(例えば、不正な仮想マシン)を使用している場合ですxdebug.client_host
修理する.DocDebugイメージのXDebugのインストール
もしあなたがDockerを使っているなら(そして、あなたがそうでなければ、私はそれについて考えることをお勧めします!)以下は、XDebugを開発中のイメージにインストールせずにインストールする方法の例ですmulti-stage builds :
# (or your base image)
FROM php:8.0-fpm-alpine as base
# whatever you do to set up your image
# for example:
# - copying your source code
# - installing extensions
# - doing a `composer install`
FROM base as development
RUN pecl install xdebug && docker-php-ext-enable xdebug
FROM base as production
# whatever you do to prepare your image for production
# for example: removing packages you don't need in production
結論
それだ!これで、XDebugの設定をする必要があります.
あなたがこの設定を使用している場合、それはあなたのTwitter上で私にエールをしてください、私はおそらくこのポストにメモを追加してください、それは動作しませんセットアップを発見した!
Reference
この問題について(XDebug 3をDockerコンテナ内でPHPデバッグ), 我々は、より多くの情報をここで見つけました https://dev.to/lynnntropy/php-debugging-with-xdebug-3-inside-a-docker-container-2mpeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol